基于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。

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

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

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

二、主要步骤

1、软件以及环境

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

2、设置接口

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

private DrawingControl.DrawingCtl drawingCtl1;

3、界面设计

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

基于C#的画图应用程序(窗体应用程序)C#组件、控件_第1张图片

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#组件、控件_第2张图片

基于C#的画图应用程序(窗体应用程序)C#组件、控件_第3张图片

请勿抄袭,

代码请到主页查看。 

你可能感兴趣的:(c#,开发语言,算法)