使用VS2019,建立窗体应用程序,借助一系列控件实现画图功能。
结合组件与控件的使用。
目录
一、预备知识
1、什么是C#的组件和控件
(1)共同点
(2)不同点
二、主要步骤
1、软件以及环境
2、设置接口
3、界面设计
4、编写代码
5、编译程序和运行
三、编写代码
1、设置不同绘制模式
2、为画板添加事件
(1)MouseDown事件
(2)MouseUp事件
(3)DoubleClick事件
(4)Load事件
四、实现效果
组件和控件是两种不同的“工具”,有共同点,也有许多不同之处。
①都不需要专门注册。
②运行都需要.NET Framework支持,开发前必须在机器上安装C#.NET软件。
③都需要在桌面应用程序或控制台应用、程序中调试或行。
①组件是组件类模块,控件是用户控件模块。
②组件的父类是Component,控件的父类是UserControl。
③组件没有界面,控件有界面。
④组件通过添加引用使用,控件可直接拖放到窗体上。
⑤创建组件首先要创建类库应用程序。
在机器上安装C#.NET软件,打开C#.NET编程环境,建立控件应用程序。在其中建立解决方案、应用程序项目和COM类模块或控件模块等文件。
对于控件应用程序,添加接口模块,设计所需的接口。对于COM组件应用程序添加类模块,编写类,设置类的父类和要实现的接口,在类中添加属性、方法等成员。
private DrawingControl.DrawingCtl drawingCtl1;
对于控件应用程序添加控件模块(默认已加载一个控件模块),编写控件,设计控件界面,为控件添加属性、方法和事件。
在方法或事件中编写代码,完成相应功能。(详细在下一部分介绍)
编译程序,生成组件库文件或控件程序,都是DLL文件。创建外部应用程序,加载组件或控件,对其进行调试和运行。
实现点、线、矩形、椭圆、圆、填充矩形、填充椭圆、填充圆、填充字体的绘制。
主要是为了区分不同的绘制模式,可以利用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;
(以画椭圆为例)
通过区分不同的绘图模式,来设置不同的绘制方法。
pic.Cursor == Cursors.Cross && drawmode == 3
定义绘图方法。
x1 = e.X;
y1 = e.Y;
pen1 = mypen;
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;
pic.Cursor = Cursors.Arrow;
drawmode = 0;
clicknum = 0;
x1 = 0;
y1 = 0;
x2 = 0;
y2 = 0;
为组件的添加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);
请勿抄袭,
代码请到主页查看。