基于C#的画图应用程序(窗体应用程序)C#组件、控件

这篇具有很好参考价值的文章主要介绍了基于C#的画图应用程序(窗体应用程序)C#组件、控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  使用VS2019,建立窗体应用程序,借助一系列控件实现画图功能。

  结合组件与控件的使用。

目录

一、预备知识

1、什么是C#的组件和控件

(1)共同点

(2)不同点

二、主要步骤

1、软件以及环境

2、设置接口

3、界面设计

4、编写代码

5、编译程序和运行

三、编写代码

1、设置不同绘制模式

2、为画板添加事件

(1)MouseDown事件

 (2)MouseUp事件

(3)DoubleClick事件 

(4)Load事件

四、实现效果

一、预备知识

1、什么是C#的组件和控件

    组件和控件是两种不同的“工具”,有共同点,也有许多不同之处。

(1)共同点

①都不需要专门注册。

②运行都需要.NET Framework支持,开发前必须在机器上安装C#.NET软件。

③都需要在桌面应用程序或控制台应用、程序中调试或行。

(2)不同点

①组件是组件类模块,控件是用户控件模块。

②组件的父类是Component,控件的父类是UserControl。

③组件没有界面,控件有界面。

④组件通过添加引用使用,控件可直接拖放到窗体上。

⑤创建组件首先要创建类库应用程序。

基于C#的画图应用程序(窗体应用程序)C#组件、控件

二、主要步骤

1、软件以及环境

    在机器上安装C#.NET软件,打开C#.NET编程环境,建立控件应用程序。在其中建立解决方案、应用程序项目和COM类模块或控件模块等文件。

2、设置接口

    对于控件应用程序,添加接口模块,设计所需的接口。对于COM组件应用程序添加类模块,编写类,设置类的父类和要实现的接口,在类中添加属性、方法等成员。

private DrawingControl.DrawingCtl drawingCtl1;

3、界面设计

    对于控件应用程序添加控件模块(默认已加载一个控件模块),编写控件,设计控件界面,为控件添加属性、方法和事件。

基于C#的画图应用程序(窗体应用程序)C#组件、控件

4、编写代码

    在方法或事件中编写代码,完成相应功能。(详细在下一部分介绍)

5、编译程序和运行

    编译程序,生成组件库文件或控件程序,都是DLL文件。创建外部应用程序,加载组件或控件,对其进行调试和运行。

三、编写代码

实现点、线、矩形、椭圆、圆、填充矩形、填充椭圆、填充圆、填充字体的绘制。

1、设置不同绘制模式

    主要是为了区分不同的绘制模式,可以利用bool类型的变量作为“开关”;也可以使用鼠标的Cursors变量的不同值作为“开关”;或定义一个整型变量(drawmode),通过取不同的数值来作为“开关”。

    三者的不同之处在于,如果使用bool类型的变量作为“开关”,如果涉及的按钮较多,增加了代码长度,且不便于管理。例如:绘图有ABCD四种不同的方法,我们在绘制时,只需要使用A方法,那么在A的点击事件中,需要同时设置BCD方法的bool变量为false。在这里需要注意一旦其他方法没有设置关闭,会引起画板事件同时处理多种绘图方法,造成混乱;使用Cursor作为“开关”时,绘图时,鼠标会呈现不同的形式,对总体代码影响不大;定义一个整型变量,当点击不同的按钮时,整型变量有不同的值相对应,这样避免了bool变量造成混乱的情况。

    使用在这里,我们通过Cursor的不同值与定义整形变量(drawmode)相结合的方法,来区分不同的画图方法。例如:

按钮的MouseDown事件:

private PictureBox pic = new PictureBox(); 
pic.Cursor = Cursors.UpArrow;
bs = new SolidBrush(Color.Red);//创建画笔
drawmode1 = 1;

2、为画板添加事件

(以画椭圆为例)

(1)MouseDown事件

    通过区分不同的绘图模式,来设置不同的绘制方法。

pic.Cursor == Cursors.Cross  && drawmode == 3

    定义绘图方法。

x1 = e.X;
y1 = e.Y;
pen1 = mypen;

 (2)MouseUp事件

                x2 = e.X;
                y2 = e.Y;
                int w;
                int h;
                w = Math.Abs(x2 - x1);
                h = Math.Abs(y2 - y1);
                Rectangle r;
                ///不同的画法也能实现
                if (x1 < x2 && y1 < y2)
                {
                    r = new Rectangle(x1, y1, w, h);
                    g.DrawEllipse(pen1, r);
                }
                else if (x1 > x2 && y1 > y2)
                {
                    r = new Rectangle(x2, y2, w, h);
                    g.DrawEllipse(pen1, r);
                }
                else if (x1 < x2 && y1 > y2)
                {
                    r = new Rectangle(x1, y2, w, h);
                    g.DrawEllipse(pen1, r);
                }
                else
                {
                    r = new Rectangle(x2, y1, w, h);
                    g.DrawEllipse(pen1, r);
                }
                x1 = x2;
                y1 = y2;

(3)DoubleClick事件 

            pic.Cursor = Cursors.Arrow;
            drawmode = 0;
            clicknum = 0;
            x1 = 0;
            y1 = 0;
            x2 = 0;
            y2 = 0;

(4)Load事件

    为组件的添加Load事件

             pic.Cursor = Cursors.Arrow ;
             pic.MouseDown += new MouseEventHandler(this.pic_MouseDown1);//定约事件
             pic.MouseUp += new MouseEventHandler(this.pic_MouseUp);
             pic.DoubleClick += new EventHandler(this.pic_DoubleClick);   

四、实现效果

基于C#的画图应用程序(窗体应用程序)C#组件、控件

基于C#的画图应用程序(窗体应用程序)C#组件、控件

请勿抄袭,

代码请到主页查看。 文章来源地址https://www.toymoban.com/news/detail-400907.html

到了这里,关于基于C#的画图应用程序(窗体应用程序)C#组件、控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#实例:多功能Windows窗体应用程序Helloworld_WinForm

    有了创建一个Windows窗体应用程序的经验,就可以开始尝试运用更多的控件实现更多丰富的功能界面。以下分享我基于项目Helloworld_WinForm 使用常用C#Windows窗体控件 实现一些小功能。 每一节标题为所用到的控件,全文以实际制作过程为序编制。 1、创建窗体Form 项目创建时会默

    2024年02月04日
    浏览(56)
  • C#:如何用VS开启人生中第一个Windows窗体应用程序(Winform)?

    摘要:Windows窗体应用程序(Winform,下文以此指代)既能有效、直观地设计Windows窗体界面,又支持内部逻辑的编写。那么,对于C#初学者来说,如何开启第一个Winform程序呢?    编程语言:C# 编程环境:Visual Studio 2019 目录 步骤 每篇寄语         1、点击桌面Visual Studio 2019图

    2024年02月09日
    浏览(57)
  • C#:WinForm应用程序中用鼠标移动控件位置

    有时候在WinForm程序中,我们需要用鼠标移动程序窗口中的对象(例如图片对象等)的位置,可以通过定义控件的鼠标事件来实现。以命名为pictureBox1的PictureBox控件为例,分别定义它的MouseDown(按下鼠标按钮)、MouseMove(移动鼠标)、MouseUp(释放鼠标按钮)三个事件,代码如

    2024年02月16日
    浏览(43)
  • 【QT】多窗体应用程序设计

    目录 1主要的窗体类及其用途 2 窗体类重要特性的设置 2.1 setAttribute()函数 2.2 setWindowFlags()函数 2.3 setWindowState()函数 2.4 setWindowModality()函数 2.5 setWindowOpacity()函数 3 多窗口应用程序的设计 3.1 主窗口设计 3.2 QFormDoc类的设计 3.3 QFormDoc类的使用 3.4 QFormTable类的设计 3.5 QFormTable类的使

    2024年01月18日
    浏览(44)
  • 06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)

    常用的窗体基类是QWidget、QDialog 和QMainWindow,在创建 GUI应用程序时选择窗体基类就是从这 3 个类中选择。QWidget 直接继承于 QObject,是 QDialog 和 QMainWindow 的父类,其他继承于 QWidget 的窗体类还有 QSplashScreen、QMdiSubWindow和QDesktopWidget。另外还有一个类QWindow,它同时从 QObject 和Q

    2024年02月13日
    浏览(85)
  • 基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

    今次介绍一个应用程序单例唯一运行方案的代码。 我们知道,有些应用程序在操作系统中需要单例唯一运行,因为程序多开的话会对程序运行效果有影响,最基本的例子就是打印机,只能运行一个实例。这里将笔者单例运行的代码共享出来,需要的读者请自己复用该代码到自

    2024年02月14日
    浏览(47)
  • Visual Studto 2022 如何创建 C++ CLR Windows窗体应用程序

    #include \\\"pch.h\\\" #include \\\"MyForm.h\\\" using namespace System; using namespace ConsoleApplication1; int main(arraySystem::String ^ ^args) {     Windows::Forms::Application::Run( gcnew MyForm());     return 0; }  

    2024年02月03日
    浏览(94)
  • WPF嵌入外部exe应用程序-使用Winfom控件承载外部程序

    首先要解决在WPF中如何使用Winfom控件的问题,官方对此有支持的方式。 在引用管理器中添加winfrom相关的程序集 System.Windows.Forms 和 WindowsFormsIntegration 。 然后使用winform的控件,得在外面套一层WindowsFormsHost(好像添加了WindowsFormsIntegration,不使用wfi:也能使用) 这样就可以在WPF中使

    2024年02月17日
    浏览(64)
  • C#桌面程序(winform)如何一步步集成内置WebApi(owin技术),解耦IIS,并将Api接收信息推给桌面窗体控件展示

    最近工厂有个需求,服务器上部署了一个服务,此服务要把信息推送给现场多台工控机上的CS上位机程序。由于涉及到多个软件之间的通信,做架构时,首先排除掉中间表形式,从效率和稳定性上也排除掉了Socket,最后采用了WebApi接口形式来做通信。但是有个问题,上位机程

    2023年04月08日
    浏览(43)
  • C# 跨线程访问窗体控件

    在不加任何修饰的情况下,C# 默认不允许跨线程访问控件,实际在项目开发过程中,经常使用跨线程操作控件属性,需要设置相关属性才能正确使用,两种方法设置如下: 方法1:告诉编译器取消跨线程访问检查,在窗体构造函数中编写,如下图所示: 方法2:设置所需的控件

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包