WinForm控件开发基础教程五类型转换器
winform教程
winform教程WinForm(Windows Forms)是微软基于.NET Framework开发的一种用户界面设计工具。
它使用了传统的窗体、标签、按钮等控件来创建GUI界面,是使用C#或语言开发桌面应用程序的一种方式。
WinForm教程1. 创建新的WinForm应用程序项目打开Visual Studio,在菜单栏中选择“文件”->“新建”->“项目”,选择“Visual C#”或“Visual Basic”下的“Windows”或“Windows经典桌面”类别,在右侧选择“Windows Forms应用程序”。
输入项目名称,选择存储路径,点击“确定”按钮创建新的WinForm应用程序项目。
2. 设计界面在Visual Studio的设计器中,可以通过拖拽控件来设计界面。
常用的控件包括标签(Label)、文本框(TextBox)、按钮(Button)、列表框(ListBox)等。
选择相应的控件,在窗体上拖拽并调整位置和大小。
可以使用属性窗口来设置控件的属性,例如文本、字体、大小等。
3. 添加事件处理程序在WinForm应用程序中,控件的各种操作通常需要绑定相应的事件处理程序。
例如,当按钮被点击时,需要执行相应的代码。
在设计器中,选择要添加事件处理程序的控件,在属性窗口的“事件”标签页中选择相应的事件,双击后会自动创建事件处理程序并打开代码编辑器。
4. 编写业务逻辑通过代码编辑器,可以编写业务逻辑代码。
例如,在按钮的点击事件处理程序中,可以编写代码来实现具体的功能,如弹出消息框、读取文本框的内容等。
通过使用.NET Framework提供的类库,可以实现各种功能,如数据访问、文件操作、网络通信等。
5. 调试和运行应用程序在编写完业务逻辑代码后,可以通过单击“开始调试”按钮或按下F5键来调试和运行应用程序。
在调试过程中,可以使用调试工具来检查代码执行的情况,并进行逐行调试。
6. 发布应用程序当应用程序开发完成后,可以将其发布为独立的可执行文件。
WinForm控件开发基础教程五类型转换器
WinForm控件开发基础教程五类型转换器上一篇文章我已经介绍了TypeConverterAttribute元数据的作用,本文将通过代码向你展示具体的实现。
在这个例子中,我要给控件添加一个复杂的属性,这个属性对这个控件没有什么功用,纯粹是为了演示,有些牵强附会了。
现在在前一篇文章中的创建的控件代码中添加一个Scope属性:[Browsable(true)]public Scope Scope{get { return _scope; }set { _scope = value; }}这个属性的类型是Scope类,代码如下:public class Scope{private Int32 _min;private Int32 _max;public Scope(){}public Scope(Int32 min, Int32 max){_min = min;_max = max;}[Browsable(true)]public Int32 Min{get { return _min; }set { _min = value; }}[Browsable(true)]public Int32 Max{get { return _max; }set { _max = value; }}}添加完属性后,build控件工程,然后在测试的工程里选中添加的控件,然后在属性浏览器里观察它的属性,发现Scope属性是灰的,不能编辑。
前一篇文章提到了,在属性浏览器里可以编辑的属性都是有类型转换器的,而.NET框架为基本的类型和常用的类型都提供了默认的类型转换器。
接下来我们为Scope类添加一个类型转换器,以便这个属性能够被编辑,而且也可以在源代码文件里自动生成相应的代码。
下面是类型转换器的代码:public class ScopeConverter : TypeConverter{public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {if (sourceType == typeof(String))return true;return base.CanConvertFrom(context, sourceType);}public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {if (destinationType == typeof(String))return true;if (destinationType == typeof(InstanceDescriptor))return true;return base.CanConvertTo(context, destinationType);}public override object ConvertTo(ITypeDescriptorContext context,System.Globalization.CultureInfo culture, object value, Type destinationType) {String result = "";if (destinationType == typeof(String)){Scope scope = (Scope) value;result = scope.Min.ToString() + "," + scope.Max.ToString();return result;}if (destinationType == typeof(InstanceDescriptor)){ConstructorInfo ci = typeof(Scope).GetConstructor(new Type[] { typeof(Int32), typeof(Int32) });Scope scope = (Scope) value;return new InstanceDescriptor(ci, new object[] { scope.Min, scope.Max });}return base.ConvertTo(context, culture, value, destinationType);}public override object ConvertFrom(ITypeDescriptorContext context,System.Globalization.CultureInfo culture, object value){if (value is string){String[] v = ((String) value).Split(',');if (v.GetLength(0) != 2){throw new ArgumentException("Invalid parameter format");}Scope csf = new Scope();csf.Min = Convert.ToInt32(v[0]);csf.Max = Convert.ToInt32(v[1]);return csf;}return base.ConvertFrom(context, culture, value);}}现在我们为类型提供类型转换器,我们在类型前面添加一个TypeConverterAttribute,如下:[TypeConverter(typeof(ScopeConverter))]public class Scope添加完以后build工程,然后切换到测试工程,选中控件,在属性浏览器里查看属性,现在的Scope属性可以编辑了,如下图所示:我们修改默认的值,然后看看Form设计器为我们生成了什么代码:this.myListControl1.BackColor = System.Drawing.SystemColors.ActiveCaptionText;this.myListControl1.Item.Add(1);this.myListControl1.Item.Add(2);this.myListControl1.Item.Add(3);this.myListControl1.Item.Add(6);this.myListControl1.Item.Add(8);this.myListControl1.Item.Add(9);this.myListControl1.Location = new System.Drawing.Point(12, 34); = "myListControl1";this.myListControl1.Scope = new CustomControlSample.Scope(10, 200);this.myListControl1.Size = new System.Drawing.Size(220, 180);this.myListControl1.TabIndex = 1;this.myListControl1.Text = "myListControl1";关键是这一行this.myListControl1.Scope = new CustomControlSample.Scope(10, 200),Scope 类的类型转换器为属性提供了实例化的代码。
WinForm控件开发
WinForm控件开发01 开篇我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件。
在自己开发WinForm控件的时候,没有太多可以借鉴的资料,只能盯着MSDN使劲看,还好总算有些收获。
现在我会把这些经验陆陆续续的总结出来,写成一系列方章,希望对看到的朋友有所帮助。
今天我来开个头。
其实开发WinForm控件并不是很复杂,.NET为我们提供了丰富的底层支持。
如果你有MFC或者API图形界面的开发经验,那么学会WinForm控件可能只需要很短的时间就够了。
自己开发的WinForm控件通常有三种类型:复合控件(Composite Controls),扩展控件(Extended Controls),自定义控件(Custom Controls)。
● 复合控件:将现有的各种控件组合起来,形成一个新的控件,将集中控件的功能集中起来。
● 扩展控件:在现有控件的控件的基础上派生出一个新的控件,为原有控件增加新的功能或者修改原有控件的控能。
● 自定义控件:直接从System.Windows.Forms.Control类派生出来。
Control类提供控件所需要的所有基本功能,包括键盘和鼠标的事件处理。
自定义控件是最灵活最强大的方法,但是对开发者的要求也比较高,你必须为Control类的OnPaint事件写代码,你也可以重写Control类的WndProc方法,处理更底层的Windows消息,所以你应该了解GDI+和Windows API。
本系列文章主要介绍自定义控件的开发方法。
控件(可视化的)的基本特征:1.可视化。
2.可以与用户进行交互,比如通过键盘和鼠标。
3.暴露出一组属性和方法供开发人员使用。
4.暴露出一组事件供开发人员使用。
5.控件属性的可持久化。
6.可发布和可重用。
这些特征是我自己总结出来,不一定准确,或者还有遗漏,但是基本上概括了控件的主要方面。
接下来我们做一个简单的控件来增强一下感性认识。
WinForm基础教程
DataAdapter
TableAdapter 提供应用程序和数据库之 间的通信。
TableAdapter 是使用“数据集设计器”在强 类型数据集中创建的。
WinForm基础教程
BindingSource 控件
BindingSource 组件有两种用途。首先, 它通过提供一个间接寻址层、当前项管 理、更改通知和其他服务简化了窗体中 控件到数据的绑定。这是通过将 BindingSource 组件附加到数据源然后将 窗体中的控件绑定到 BindingSource 组 件来实现的。与数据的所有进一步交互, 包括定位、排序、筛选和更新,都通过 调用 BindingSource 组件实现。
Win Form 智能客户端
System.Windows.Forms
WinForm基础教程
System.Windows.Forms
Win Form 及控件 Application 数据绑定 打印 应用程序设置 ClickOnce 部署
WinForm基础教程
Win Form 及控件
FlowLayoutPanel、TableLayoutPanel MenuStrip、ContextMenuStrip ToolStripContainer、ToolStrip、StatusStrip DataGridView WebBrowser Control Form UserControl MessageBox Application对象
WinForm基础教程
附属程序集
附属程序集包含单个区域性的资源,但 不包含任何代码。
t:lib /embed:strings.de.resources /culture:de /out:MyApp.resources.dll
winform练习题
Winform练习题一、基础操作创建一个主窗体,窗体为“基础操作练习”。
在主窗体上添加一个按钮,按钮文本为“显示消息”。
为按钮添加事件,按钮后,在消息框中显示“Hello,World!”。
文本框中输入内容后,按钮,将文本框内容显示在标签上。
在列表框中添加三个选项:“选项1”、“选项2”、“选项3”。
按钮后,将列表框中选中的选项显示在消息框中。
二、控件应用一个标签,显示“请输入姓名:”。
一个文本框,用于输入姓名。
一个按钮,后显示“您好,姓名!”(姓名为文本框中输入的内容)。
包含一个复选框列表,列出三个选项:“足球”、“篮球”、“乒乓球”。
一个按钮,后显示用户选择的运动项目。
一个单选按钮组,包含三个选项:“男”、“女”、“其他”。
一个按钮,后显示用户选择的性别。
三、事件处理包含一个文本框和一个标签。
当文本框内容改变时,自动更新标签内容为文本框中的内容。
每次按钮,标签中的数字增加1。
按钮后,进度条开始从0到100递增。
四、界面布局三个标签,分别显示“姓名”、“年龄”、“性别”。
三个文本框,分别用于输入姓名、年龄、性别。
一个按钮,后显示输入的信息。
五个按钮,按钮文本分别为“1”、“2”、“3”、“4”、“5”。
按钮自动排列在一行。
左侧为列表框,列出五个选项。
右侧为文本框,显示左侧列表框中选中的选项。
五、文件操作一个文本框,用于输入文件路径。
一个按钮,后读取文本框中的文件路径,并将文件内容显示在另一个文本框中。
一个按钮,后打开文件对话框,选择一个文件并读取其内容,显示在文本框中。
一个文本框,用于输入要保存的内容。
一个按钮,后将文本框中的内容保存到文件中。
六、图形与绘图在窗体上绘制一个矩形。
在矩形内部绘制一个圆形。
在窗体上绘制一个正弦波形。
在窗体���绘制一个时钟,显示当前时间。
七、数据库操作连接到一个数据库(例如:SQL Server、MySQL等)。
查询数据库中的数据,并将结果显示在数据网格视图中。
插入一条新记录到数据库中。
学习WinForm最基本控件
课程复习与回顾
❖ 学习内容总结: ❖ 1: 五大最基本控件的使用。 ❖ 2: Form 窗体常用属性。 ❖ 3: 分别使用设计器“属性框”与代码方式给
控件设置属性与事件。 ❖ 4: 学习消息框 MessageBox.show() 的用法。
30
课程复习与回顾
❖ 课后作业: ❖ 1: 书本 P37页 课后练习1,建立用户登录窗
boBox3.Items.Add("财务部"); boBox3.Items.Add("产品部"); boBox3.Items.Add("销售部"); boBox3.Items.Add("生产部"); //默认的选择是"产品部" boBox3.SelectedIndex = 1; }
22
2. 最基本控件—消息框
消息框用于显示消息
消息框窗口
MessageBox.Show(“[消息文本]");
if (MessageBox.Show(“保存文件”,“保存",
MessageBoxButtons.YesNo, rmation,
MeMsessasaggeeBBoxoIcxonDefaultButton.Button1) == DialogResult.Yes)
20
2. 最基本控件 组合框
属性
DropDownStyle MaxDropDownItems
方法
说明
ComboBox 控件的样式 下拉区显示的最大项目数
说明
t
在 ComboBox 控件上选定指定 范围的文本
21
2. 最基本控件
private void Form1_Load(object sender, EventArgs e) { boBox1.Items.Add("财务部"); boBox1.Items.Add("产品部"); boBox1.Items.Add("销售部"); boBox1.Items.Add("生产部"); //默认的选择是"产品部" boBox1.SelectedIndex = 1;
C#winform类型转换和时间详解
C#winform类型转换和时间详解C# winform 类型转换和时间详解1. // C 货币2. 2.5.ToString("C"); // ¥2.503. // D 10进制数4. 25.ToString("D5"); // 250005. // E 科学型6. 25000.ToString("E"); // 2.500000E+0057. // F 固定点8. 25.ToString("F2"); // 25.009. // G 常规10. 2.5.ToString("G"); // 2.511. // N 数字12. 2500000.ToString("N"); // 2,500,000.0013. // X 16进制14. 255.ToString("X"); // FF1. // C# ⽇期格式2. DateTime dt = DateTime.Now;3.4. dt.ToString();//2005-11-5 13:21:255. dt.ToFileTime().ToString();//1277564168599128166. dt.ToFileTimeUtc().ToString();//1277567048599128167. dt.ToLocalTime().ToString();//2005-11-5 21:21:258. dt.ToLongDateString().ToString();//2005年11⽉5⽇9. dt.ToLongTimeString().ToString();//13:21:2510. dt.ToOADate().ToString();//38661.556550821811. dt.ToShortDateString().ToString();//2005-11-512. dt.ToShortTimeString().ToString();//13:2113. dt.ToUniversalTime().ToString();//2005-11-5 5:21:2514. dt.Year.ToString();//200515. dt.Date.ToString();//2005-11-5 0:00:0016. dt.DayOfWeek.ToString();//Saturday17. dt.DayOfYear.ToString();//30918. dt.Hour.ToString();//1319. lisecond.ToString();//44120. dt.Minute.ToString();//3021. dt.Month.ToString();//1122. dt.Second.ToString();//2823. dt.Ticks.ToString();//63266794228441286424. dt.TimeOfDay.ToString();//13:30:28.441286425. dt.ToString();//2005-11-5 13:47:0426. dt.AddYears(1).ToString();//2006-11-5 13:47:0427. dt.AddDays(1.1).ToString();//2005-11-6 16:11:0428. dt.AddHours(1.1).ToString();//2005-11-5 14:53:0429. dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:0430. dt.AddMonths(1).ToString();//2005-12-5 13:47:0431. dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:0532. dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:1033. dt.AddTicks(1000).ToString();//2005-11-5 13:47:0434. pareTo(dt).ToString();//035. dt.Add(?).ToString();//问号为⼀个时间段36. dt.Equals("2005-11-6 16:11:04").ToString();//False37. dt.Equals(dt).ToString();//True38. dt.GetHashCode().ToString();//147408823439. dt.GetType().ToString();//System.DateTime40. dt.GetTypeCode().ToString();//DateTime41.42. dt.GetDateTimeFormats('s')[0].ToString();//2005-11-05T14:06:2543. dt.GetDateTimeFormats('t')[0].ToString();//14:0644. dt.GetDateTimeFormats('y')[0].ToString();//2005年11⽉45. dt.GetDateTimeFormats('D')[0].ToString();//2005年11⽉5⽇46. dt.GetDateTimeFormats('D')[1].ToString();//2005 11 0547. dt.GetDateTimeFormats('D')[2].ToString();//星期六 2005 11 0548. dt.GetDateTimeFormats('D')[3].ToString();//星期六 2005年11⽉5⽇49. dt.GetDateTimeFormats('M')[0].ToString();//11⽉5⽇50. dt.GetDateTimeFormats('f')[0].ToString();//2005年11⽉5⽇ 14:0651. dt.GetDateTimeFormats('g')[0].ToString();//2005-11-5 14:0652. dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT53.54. string.Format("{0:d}",dt);//2005-11-555. string.Format("{0:D}",dt);//2005年11⽉5⽇56. string.Format("{0:f}",dt);//2005年11⽉5⽇ 14:2357. string.Format("{0:F}",dt);//2005年11⽉5⽇ 14:23:2358. string.Format("{0:g}",dt);//2005-11-5 14:2359. string.Format("{0:G}",dt);//2005-11-5 14:23:2360. string.Format("{0:M}",dt);//11⽉5⽇61. string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT62. string.Format("{0:s}",dt);//2005-11-05T14:23:2363. string.Format("{0:t}",dt);//14:2364. string.Format("{0:T}",dt);//14:23:2365. string.Format("{0:u}",dt);//2005-11-05 14:23:23Z66. string.Format("{0:U}",dt);//2005年11⽉5⽇ 6:23:2367. string.Format("{0:Y}",dt);//2005年11⽉68. string.Format("{0}",dt);//2005-11-5 14:23:2369. string.Format("{0:yyyyMMddHHmmssffff}",dt);70.71.72. // 计算2个⽇期之间的天数差73. DateTime dt1 = Convert.DateTime("2007-8-1");74. DateTime dt2 = Convert.DateTime("2007-8-15");75. TimeSpan span = dt2.Subtract(dt1);76. int dayDiff = span.Days + 1;77.78. // 计算某年某⽉的天数79. int days = DateTime.DaysInMonth(2007, 8);80. days = 31;81.82. // 给⽇期增加⼀天、减少⼀天83. DateTime dt =DateTime.Now;84. dt.AddDays(1); //增加⼀天85. dt.AddDays(-1);//减少⼀天⽇期格式模式说明d ⽉中的某⼀天。
学习的内容
考虑到目前.Net招聘中WinForm开发的职位相对较少,因此我们对项目进行了裁剪,去掉了项目中WinForm特有的技术点(页面布局、MDI、Win32 PInvoke、托盘编程、Windows Service、WinForm换肤、ActiveX等),这样保留的部分都是采用的非WinForm特有的技术,只是用WinForm做“壳”,主要内容都不是WinForm特有的技术,讲授的技术点都会在后续的课程中还会用到,比如项目中使用的数据库访问技术(SQLHelper、TypedDataSet)会贯穿培训课程的始终,UserControl则对应中的WebUserControl,MD5安全算法在网站项目的用户管理、第三方支付集成等中还会用到,FTP编程在如鹏网项目的远程附件、静态页面生成等功能点还会用到,树状数据结构处理是几乎所有网站项目的栏目板块管理中都要涉及到的。由于相对复杂,而且需要有扎实的.Net基础和大量的编码经验学习才能牢固的掌握,如果等到学完了再安排项目则会降低培训效果,而用WinForm进行“借壳学习”则门槛非常低,只要预先讲解一天时间的WinForm基础知识就可以开发了,传智播客巧妙了安排了这个项目,来让学员在第一时间看到项目开发和所学知识在项目中的应用,从而促进后续知识点的学习。
由于访问量非常大,因此互联网项目的开发对开发人员的要求非常高,所以我们安排了互联网调优、缓存、网站防黑等内容。
中控件数量是非常多的,讲解的教材通常要上千页,让初学者望而生畏,其实大部分控件相似性非常强的,同类型的控件学会了一个那么其他控件也就很容易学会了。比如只要学会了DropDownList,那么RadioButtonList、ListBox、CheckBoxList、BulletedList等几乎不用学就会用;再比如只要学会了ListView,那么Repeater、GridView、FormView等控件也是触类旁通。传智播客认真钻研教学,对知识进行分类、整理、提炼精华,让学员在短时间内掌握技术。
Winform基础
Winform基础Winform基础今天开始我们为⼤家逐渐的介绍Winform的知识。
先介绍三个概念:1)⼯具箱:添加控件复制对齐2)属性(以窗体或Button为例):如何更改属性常⽤属性(name)Visibale Enabled Location Size Text等3)事件:当事件发⽣的时候,.net框架会帮助我们执⾏⼀个⽅法。
叫事件处理⽅法。
属性也可以通过代码来赋值。
MessageBox类Winform是在窗体上创建,在资源管理器中跟之前我们学过的在控制台中⽂件上有什么区别呢?如下图:图⼀、窗体⽂件和控制台⽂件差别图⼆、添加两个按钮,及其它们的属性图三、Winform中的排版⼯具属性:拖⼊⼀个按钮;修改其属性值Ctrl+W+P 可以打开控件的属性窗⼝;可以设置控件⾥⾯显⽰的内容;修改控件的名字的;改变控件背景颜⾊的;事件:在属性窗⼝⾥点击闪电图标,就可以找到这个控件的很多事件,直接双击就可以添加代码了按钮的点击事件;图四、添加⼀个按钮点击事件,弹出消息事件:窗体的单击⿏标的时候发⽣;在窗体上双击⿏标的时候发⽣;在窗体上按下⿏标的时候就发⽣;在⿏标进⼊控件可见的部分时候发⽣此处代码参考上⾯的添加按钮的单击事件。
图五、练习题⽬图六、三连击事件⿏标离开可见部分的时候发⽣⿏标移动的时候发⽣⿏标抬起的发⽣图七、利⽤MouseMove事件获取⿏标的坐标属性设置背景图⽚样式图⼋、添加图⽚今天的内容介绍了⼀⼩部分winform中的常⽤属性还有事件。
感兴趣的朋友可以根据软件上的提⽰⾃⼰动⼿做些有意思的内容。
下⼀篇⽂章当中,我将对winform做更加细致的介绍,敬请期待。
作者近期⽂章列表:C#基础教程(完全免费,献给代码爱好者的最好礼物。
注:本作者分享⾃⼰精⼼整理的C#基础教程,⽆任何商业⽬的。
希望与更多的代码爱好者交流⼼得,也请⾼⼿多多指点)⾯向过程⾯向对象GDI+HTML概述。
winForm基本控件
26
4. 软件系统框架类控件组 菜单 软件系统框架类控件组-菜单
2、建立简单的菜单 (1)建立winform窗体并添加菜单组件
(2)注意菜单命名时候的问题;避免汉字 汉字出现。 汉字
27
4. 软件系统框架类控件组 菜单 软件系统框架类控件组-菜单
(3)快捷键问题
创建主菜单
配置快捷键
如果在命名时候在 在命名时候在text属性处键入“文件(&F)”,将会产生“文件(F)”的 属性处键入“ 将会产生“文件( ) 在命名时候在 属性处键入 文件( ) 效果,&将被认为是快捷键的字符。运行时候为alt+f键执行。同理,菜单功能在 分组时候可以加入分隔符号:
说明
用于指定图片框显示的图像。该图像可在设计或运行 时设置 包括 AutoSize、CenterImage、Normal 和 StretchImage。默认值为 Normal
显示位图、元文件、图标、JPEG、GIF 是一种图形显示控件 用于指定图像的显示方式。可以指定的各种大小模式 或 PNG 等格式的图形
21
3. 日期与微调控件组 日期与微调控件组-monthCalendar
3、实验案例
页面布局
22
运行样式
3. 日期与微调控件组 日期与微调控件组-DataTimePicker
23
3. 日期与微调控件组 日期与微调控件组-DataTimePicker
1、属性 showcheckbox checked showupdown value 2、案例 是否在控件中显示复选框,当复选框为选中时候,表示未 选择任何值。 当showcheckbox 为TRUE时候,确定是否选择复选框。 改为数字显示框,不再显示月历表。 当前的日期(年月日时分秒)
WinForm控件开发基础教程控件属性
WinForm控件开发基础教程四控件属性前一篇文章介绍了常用的设计时Attribute。
其中BrowsableAttribute,CategoryAttribute,DescriptionAttribute,DefaultPropertyAttribute,DefaultEventAttribute都是比较简单的,也是可有可无,但是为了提供更好的用户体验这些Attribute最好不要省掉,如果你对这些Attribute还不熟悉,可以参考我前一篇文章的描述或者查看MSDN,这里我就不在赘述了。
下来我们主要介绍一下DesignerSerializationVisibilityAttribute和TypeConverterAttribute。
DesignerSerializationVisibilityAttribute的功能是指示一个属性是否串行化和如何串行化,它的值是一个枚举,一共有三种类型Content,Hidden,Visible。
Content指示代码生成器为对象包含的内容生成代码,而不是为对象本身,Hidden指示代码生成器不为对象生成代码,visible指示代码生成器为对象生成代码。
假如你的控件有一个集合属性,又想在设计时自动将集合属性的内容生成代码,那么就使用这个Attribute,并将值设为DesignerSerializationVisibility.Content。
TypeConverterAttribute的作用就更大一些,也稍微复杂一些。
TypeConverterAttribute主要的目的是为属性指定一个类型转换器,这个转化器可以将属性的值转换城其它的类型。
.NET 框架已经为大部分常用的类型都提供了类型转换器,比如Color就有ColorConverter,枚举类型就有EnumConverter,等等,所以一般情况下你没有必要写类型转换器,如果你的属性的特殊的类型或者自定义的类型那么就必须要写了。
winform中用方法
winform中用方法在WinForms(Windows Forms)应用程序中,您可以使用方法来执行特定的任务或操作。
方法是一段封装好的代码,它接受输入参数(如果有的话)并返回一个值(如果需要的话)。
下面是一个简单的例子,展示了如何在WinForms应用程序中使用方法:1. 首先,创建一个新的Windows Forms应用程序。
2. 在设计视图中,从工具箱拖动一些控件(如按钮、文本框等)到窗体上。
3. 双击窗体或控件,以自动生成事件处理程序。
4. 在代码视图中,编写一个方法来执行您想要的操作。
例如,下面是一个简单的示例方法,它将在单击按钮时被调用:```csharpprivate void DisplayMessage(object sender, EventArgs e){// 获取文本框的文本string message = ;// 显示消息框("您输入的消息是:" + message);}```5. 现在,将这个方法与按钮的单击事件关联起来。
打开窗体的设计视图,选择您想要关联方法的按钮。
6. 在属性窗口中,找到“事件”(闪电标志)图标,展开“Click”事件。
7. 从下拉列表中选择您编写的方法(在本例中是`DisplayMessage`),然后按Enter键。
8. 现在,当您运行应用程序并单击该按钮时,`DisplayMessage`方法将被调用,并显示一个消息框显示文本框中的文本。
这只是一个简单的示例,展示了如何在WinForms应用程序中使用方法。
您可以根据需要编写更复杂的方法来执行各种任务和操作。
第6章 WinForm基础
Form1.cs窗体上,会在Form1. Designer.cs文件自动生成一段代码,具体如
下图所示。
• 在窗体类Form1的末尾,自动生成 了一行代码,该行代码表示Form1 窗体中新建了一个名称为button1 的按钮对象。
6.1 WinForm 简介
让IT教学更简单,让IT学习更有效
• 6.1.1 WinForm项目的文件结构
6.1 WinForm 简介
让IT教学更简单,让IT学习更有效
• 6.1.1 WinForm项目的文件结构
• Application.Run()方法中的参数就是窗体
对象。如果要执行某个窗体,就需要将
该窗体对象传入。在后面运行窗体程序 时,都需要将Application.Run()方法中的 参数修改为对应的窗体对象。
4、设置控件的属性
选中Label标签,按F4打开【属性】窗口,点击【属性】窗口的“ ”图标,
会将控件的所有属性显示出来。分别给Label和Text属性设置属性值,效果
如下图所示。
6.1 WinForm 简介
让IT教学更简单,让IT学习更有效
• 6.1.2 创建第一个WinForm应用程序
5、实现控件事件的响应方法
6.1 WinForm 简介
让IT教学更简单,让IT学习更有效
• 6.1.2 创建第一个WinForm应用程序
接下来对Form1.cs文件中的代码进行修改,修改后的代码如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 } } } private { // 关闭主体 窗,t h i 表 s 示当前窗体对象 this.Close(); void btnMe_Click(object sender, EventArgs e) } // 鼠标进入按钮显示界 ,执 面行 时此 方 法 private { // 创建一个随机数对象 Random r=new = = Random(); r.Next(0, - tbhtinsM.eW.iWdi -5 tdh ) t; h r.N te hx it s( .0 H, e igb h t n M e . H e -5 ig )h ;t // 为 b t n M对 e象的 L e f属 t 性 赋值, L e f 属性表 t 示控件左边缘与其容器的工作区左边缘之间的距离 btnMe.Left btnMe.Top // 返 回 一 个 指 定 范 围 内 的 随 机 数 ,b并 t赋 nM 值 对 e给 象的 Top 属性 void b t n M e _ M o u s e E n t e r ( o btjAercgts see)n d e r , Even public { public { InitializeComponent(); F 1o (r )m partial class Form1 : Form
devexpress winform用法
devexpress winform用法DevExpress WinForms 是一款功能强大的界面开发工具,它提供了丰富的控件和组件,可以帮助开发人员快速构建交互性强、美观的 Windows 窗体应用程序。
本文将介绍一些DevExpress WinForms 的常用用法和相关参考内容,帮助读者更好地理解和应用该工具。
一、控件和组件1. GridControl:GridControl 是DevExpress WinForms 的核心控件之一,用于显示和编辑数据。
它支持数据绑定、分组、排序、过滤、弹出式编辑等丰富的功能。
参考内容可以查阅DevExpress WinForms 的官方文档,其中包含详细的用法示例和教程。
2. BarManager:BarManager 是一个用于创建和管理菜单栏、工具栏和状态栏的组件。
它可以方便地进行布局、定制和样式设置。
参考内容可以查阅DevExpress WinForms 官方文档中的BarManager 相关章节,其中包括如何创建菜单栏、添加按钮和分隔符等操作。
3. ChartControl:ChartControl 是一个用于绘制各种类型图表的控件,例如折线图、柱状图、饼图等。
它提供了丰富的图表类型和样式设置选项,可以满足不同需求的数据可视化需求。
参考内容可以查阅DevExpress WinForms 官方文档中的ChartControl 相关章节,其中包括如何绑定数据、添加系列和设置图表样式等操作。
二、布局和样式1. LayoutControl:LayoutControl 是一个用于创建复杂布局的控件,可以将控件按照自定义的布局规则排列,并支持自动调整布局大小。
参考内容可以查阅DevExpress WinForms 官方文档中的LayoutControl 相关章节,其中包括如何定义布局规则、添加控件和设置布局样式等操作。
2. SkinEditor:SkinEditor 是一个用于定制皮肤的工具,可以为应用程序添加不同风格的界面。
WinForm控件开发总结
WinForm控件开发总结WinForm控件开发是一种基于Windows Forms的桌面应用程序开发技术,通过创建和定制不同类型的控件,可以实现丰富多样的用户界面。
在WinForm控件开发中,需要掌握一些基本的知识和技巧,下面是我对WinForm控件开发的一些总结。
首先,WinForm控件开发需要熟悉C#编程语言和Windows Forms框架。
C#是一种面向对象的编程语言,通过使用C#可以方便地创建和管理各种控件。
Windows Forms是微软提供的用于创建Windows应用程序的框架,它提供了一套丰富的控件和事件模型,方便开发人员进行界面设计和交互逻辑编写。
其次,WinForm控件开发需要了解控件的基本属性和事件。
每个控件都有一些基本属性,如大小、位置、颜色等,通过设置这些属性可以定制控件的外观和行为。
控件还有一些事件,如点击事件、鼠标移动事件等,通过处理这些事件可以实现控件的交互逻辑。
了解控件的属性和事件是进行控件开发的基础。
另外,WinForm控件开发需要熟悉自定义控件的技巧。
自定义控件是指根据需求和设计要求创建的特定类型的控件,通过继承现有的控件类并重写一些方法,可以实现自定义控件的创建。
在自定义控件中,需要考虑控件的布局、绘制和交互逻辑等方面的问题,以及控件的属性和事件的处理。
自定义控件的开发需要一定的编程技巧和设计经验。
最后,WinForm控件开发需要进行测试和调试。
在开发过程中,需要进行各种测试和调试来确保控件的功能和性能符合预期。
可以使用调试工具和日志记录来定位和解决问题。
同时,还需要进行用户界面的测试,确保控件在不同的分辨率和操作系统环境下能够正常显示和交互。
总之,WinForm控件开发是一项需要综合运用编程知识和技巧的工作。
通过熟练掌握C#编程语言和Windows Forms框架,了解控件的属性和事件,掌握自定义控件的技巧,熟悉常用的控件和布局管理器,并进行测试和调试,可以开发出高质量的WinForm控件。
winform教学大纲
winform教学大纲Winform教学大纲Winform是一种用于开发Windows桌面应用程序的技术框架,它基于.NET平台,提供了丰富的用户界面控件和功能,使开发者能够快速构建出强大、易用的应用程序。
本文将为大家介绍Winform教学大纲,以帮助初学者系统地学习和掌握这一技术。
一、Winform概述1.1 Winform简介Winform是Windows Forms的简称,它是.NET Framework中的一个重要组成部分。
通过Winform,开发者可以使用C#或其他.NET语言来创建Windows应用程序。
1.2 Winform的优势Winform具有以下几个优势:- 简单易用:Winform提供了丰富的控件和功能,使开发者能够快速构建出用户友好的应用程序。
- 可视化设计:Winform支持可视化设计,开发者可以通过拖拽和设置属性的方式来设计界面,无需编写大量的代码。
- 跨平台兼容:Winform应用程序可以在Windows操作系统上运行,并且与.NET平台的其他组件和服务兼容。
二、Winform基础知识2.1 窗体和控件在Winform中,窗体是应用程序的主要界面,而控件则是构成界面的各个元素,如按钮、文本框、标签等。
开发者可以通过拖拽和设置属性的方式来添加和配置控件。
2.2 事件和事件处理Winform中的控件可以响应用户的操作或系统的事件,如按钮的点击事件、文本框的文本改变事件等。
开发者可以编写事件处理方法来实现相应的逻辑。
2.3 布局和容器Winform提供了多种布局方式和容器控件,如流式布局、表格布局、面板等,开发者可以根据需要选择合适的布局方式来组织界面。
三、Winform高级特性3.1 数据绑定Winform支持数据绑定,开发者可以将数据源与控件进行绑定,实现数据的显示和交互。
数据绑定可以大大简化开发工作,并提高应用程序的可维护性。
3.2 数据库操作Winform可以与数据库进行交互,开发者可以使用或Entity Framework等技术来进行数据库操作,如查询、插入、更新、删除等。
winform技巧
winform技巧1.布局管理器布局管理器是WinForm界面布局的重要工具。
它允许我们以一种自适应的方式来组织和布置控件,使得在不同尺寸和分辨率的屏幕上有良好的显示效果。
常见的布局管理器有FlowLayoutPanel、TableLayoutPanel、SplitContainer等。
合理地使用布局管理器可以减少手动计算和设置控件位置和大小的工作量。
2.锚定和对齐在WinForm中,我们可以通过设置控件的锚定和对齐方式来控制控件的位置和大小。
锚定是指控件在父容器中的位置随父容器的大小变化而变化,可以选取上、下、左、右多种锚定方式;对齐是指控件在自己的可用区域中的位置,可以选取左、右、上、下、居中等对齐方式。
合理设置锚定和对齐可以实现控件在不同分辨率和窗口大小下的自适应。
3.事件处理WinForm中的控件通过事件与用户的操作进行交互。
在处理事件时,我们可以使用事件处理器来编写代码响应用户的操作。
常见的事件有按钮的Click事件、文本框的TextChanged事件等。
在事件处理时,我们可以实现一些与用户操作相关的功能,如执行计算、更新界面等。
事件处理器的编写需要注意性能和可读性,可以通过合理地使用异步编程、委托等技术来提高代码效率。
4.数据验证在WinForm中,用户输入的数据往往需要进行有效性验证。
我们可以使用Validating和Validated事件来对数据进行验证和处理。
Validating事件在控件失去焦点之前触发,我们可以在该事件中编写验证逻辑,并通过设置e.Cancel属性来确定是否接受该值;Validated事件在控件失去焦点之后触发,我们可以在该事件中进行相应的数据处理。
合理地使用数据验证可以避免无效数据的输入和处理。
5.消息框和提示框在WinForm中,我们可以使用MessageBox类来显示消息框,通过调用Show方法来显示相应的消息。
MessageBox类提供了多种不同类型的消息框,如提示框、警告框、错误框等。
winform控件编程5
StatusStrip控件的显示效果
ToolStripStatusLabel
ToolStripDropDownButton
3.0
•
MenuStrip提供窗体的菜单系统,是窗体菜 单结构的容器。
ToolStripMenuItem ToolStripComboBox MenuStrip的组成 ToolStripSeparator ToolStripCheckBox
StatusStrip控件的常用属性
属性
Items ImageList GripStyle
描述
获取属于ToolStrip的所有项 获取或设置包含ToolStrip项上显示的图像的图像列表 获取或设置用于重新定位控件的手柄的可见性
3.0
•
StatusStrip的Items属性的编辑界面如下:
3.0
•
3.0
1. 掌握Label和Textbox的使用 2. 掌握CheckBox, RadioButton, ComboBox和ListBox的使用 3. 了解NumericUpDown和PictureBox的使 用
3.0
1. 2. 3. 4. 5.
掌握GroupBox控件 了解Panel和TableLayoutPanel控件 掌握TabControl和TabPage控件 了解StatusStrip控件 StatusStrip 掌握MenuStrip和ToolStrip控件
3.0
•
StatusStrip控件用于显示应用程序中正在操 作的对象的状态信息及与之相关的信息
ToolStripStatusLabel ToolStripDropDownButton StatusStrip的组成 ToolStripSplitButton ToolStripProgressBar
winform制作自定义控件(入门)
winform制作⾃定义控件(⼊门)原⽂链接:与原⽂基本⼀致,只是例⼦变成VS2012环境,语⾔采⽤博主常⽤的⼀、概述Windows 窗体控件是可再次使⽤的组件,它们封装了⽤户界⾯功能,并且可以⽤于客户端 Windows 应⽤程序。
“Windows 窗体”不仅提供了许多现成控件,还提供了⾃⾏开发控件的基础结构。
可以组合现有控件、扩展现有控件或创作⾃⼰的⾃定义控件。
Windows 窗体控件是从System.Windows.Forms.Control 直接或间接派⽣的类。
以下列表描述了开发 Windows 窗体控件的常见⽅案:组合现有控件来创作⼀个复合控件。
复合控件封装有⼀个可以作为控件重复使⽤的⽤户界⾯。
可视化设计器为创建复合控件提供了有⼒的⽀持。
要创作⼀个派⽣⾃erControl 的复合控件。
基类 UserControl 为⼦控件提供了键盘路由并使⼦控件可以作为⼀个组进⾏⼯作。
· 扩展现有控件,对其进⾏⾃定义或为其添加功能。
可以通过从任何 Windows 窗体控件派⽣控件并重写或添加属性、⽅法和事件的⽅式来⾃定义 Windows 窗体控件。
· 创作⼀个不是通过组合或扩展现有控件⽽形成的控件。
在这种⽅案中,需从基类 System.Windows.Forms.Control 派⽣控件。
可以添加和重写基类的属性、⽅法和事件,来制作功能强⼤,能满⾜⾃⼰需求的控件。
Windows 窗体控件的基类 System.Windows.Forms.Control 为客户端 Windows 应⽤程序中的外观显⽰提供了所需的途径。
Control 提供了⼀个窗⼝句柄,⽤来处理消息路由并提供⿏标和键盘事件及许多其他⽤户界⾯事件。
还提供了⾼级布局,并具有⽤于外观显⽰的特定属性,如ForeColor、BackColor、Height、Width 和许多其他属性。
此外,它还提供了安全性、线程⽀持以及与 ActiveX 控件的交互性。
DotNetWinForm控件开发(三)自定义类型的属性需要自定义类型转换器
DotNetWinForm控件开发(三)⾃定义类型的属性需要⾃定义类型转换器什么叫类型转换器?.NET Framework 类库为常见数据类型(如整数、⼩数、布尔值和其他数据)提供了类型转换器。
类型转换器的⽬的通常是⽤来提供字符串到数值的转换(从字符串数据转换为其他数据类型)。
常见数据类型与默认类型转换器(将数值转换为字符串,并将字符串转换为相应数据类型)相关联。
如果定义了⾃定义(即,⾮标准)数据类型的属性,则应⽤的属性必须将类型转换器指定为与该属性相关联。
前篇⽂章中的为何没有⽤到, 其实它也⽤到了, 因为它⽤的是系统⾃带的类型int, 类型转换器已经由系统⾃动提供了.如果我们使⽤了⾃⼰定义的类型, 因为系统中没有相应的类型转换器, 这就需要我们写⼀个类型转换器.下⾯我们写⼀个稍稍复杂点的属性, 它是由简单的类型加简单的属性组合⽽成的,(没有晕吧),也就是说我要⾃已定义⼀个类型, ⽽不⽤系统⾃带的类型(⽐如前篇⽂章中的int类型)下⾯就是拥有⼀个简单的复杂属性的简单控件,1using ponentModel;2using System.Windows.Forms;3using System.Drawing;45namespace CustomControlSample6{7public class SimpleComplexProperty : Control8 {9private SimpleCustomType complexField;1011 [Category("我是复杂的属性哦!")]12 [Description("我是简单的复杂属性,因为我是由简单的类型和简单的⽅式定义的。
\n定义我的类型很简单,只有两个属性(Min, Max);定义我的body也很简单,只是简单的get, set.")]13public SimpleCustomType ComplexProperty14 {15get { return complexField; }16set { complexField = value; }17 }1819protected override void OnPaint(PaintEventArgs e)20 {21base.OnPaint(e);22 e.Graphics.DrawRectangle(Pens.Red, new Rectangle(Point.Empty, new Size(Width - 1, Height - 1)));23 }2425 }2627简单的⾃定义类型5657简单的⾃定义类型的类型转换器108}109编译, 拖到windows窗体上,点击查看属性浏览器,wow, 是灰⾊的,不能使⽤. 为啥?..... 那是因为属性浏览器不知道如何转换我的属性,我们不是写了类型转换器了吗? 没有被使⽤, ...⼜要⽤到Attribute了,这真是个好东西呀在上⾯的代码中的属性ComplexProperty ⽤TypeConverter (TypeConverterAttribute的缩写)指定⼀下我们⾃定义的类型的类型转换器即可. [TypeConverter(typeof(SimpleCustomTypeConverter))]public SimpleCustomType ComplexProperty{get { return complexField; }set { complexField = value; } }再编译......查看属性浏览器OK了The end.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WinForm控件开发基础教程五类型转换器
上一篇文章我已经介绍了TypeConverterAttribute元数据的作用,本文将通过代码向你展示具体的实现。
在这个例子中,我要给控件添加一个复杂的属性,这个属性对这个控件没有什么功用,纯粹是为了演示,有些牵强附会了。
现在在前一篇文章中的创建的控件代码中添加一个Scope属性:
[Browsable(true)]
public Scope Scope
{
get{return_scope;}
set{_scope=value;}
}
这个属性的类型是Scope类,代码如下:
public class Scope
{
private Int32_min;
private Int32_max;
public Scope()
{
}
public Scope(Int32min,Int32max)
{
_min=min;
_max=max;
}
[Browsable(true)]
public Int32Min
{
get{return_min;}
set{_min=value;}
}
[Browsable(true)]
public Int32Max
{
get{return_max;}
set{_max=value;}
}
}
添加完属性后,build控件工程,然后在测试的工程里选中添加的控件,然后在属性浏览器里观察它的属性,发现Scope属性是灰的,不能编辑。
前一篇文章提到了,在属性浏览器里可以编辑的属性都是有类型转换器的,而.NET框架为基本的类型和常用的类型都提供了默认的类型转换器。
接下来我们为Scope类添加一个类型转换器,以便这个属性能够被编辑,而且也可以在源代码文件里自动生成相应的代码。
下面是类型转换器的代码:
public class ScopeConverter:TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context,Type sourceType) {
if(sourceType==typeof(String))
return true;
return base.CanConvertFrom(context,sourceType);
}
public override bool CanConvertTo(ITypeDescriptorContext context,Type destinationType) {
if(destinationType==typeof(String))
return true;
if(destinationType==typeof(InstanceDescriptor))
return true;
return base.CanConvertTo(context,destinationType);
}
public override object ConvertTo(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture,object value,Type destinationType) {
String result="";
if(destinationType==typeof(String))
{
Scope scope=(Scope)value;
result=scope.Min.ToString()+","+scope.Max.ToString();
return result;
}
if(destinationType==typeof(InstanceDescriptor))
{
ConstructorInfo ci=typeof(Scope).GetConstructor(new Type[]{typeof(Int32), typeof(Int32)});
Scope scope=(Scope)value;
return new InstanceDescriptor(ci,new object[]{scope.Min,scope.Max});
}
return base.ConvertTo(context,culture,value,destinationType);
}
public override object ConvertFrom(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture,object value)
{
if(value is string)
{
String[]v=((String)value).Split(',');
if(v.GetLength(0)!=2)
{
throw new ArgumentException("Invalid parameter format");
}
Scope csf=new Scope();
csf.Min=Convert.ToInt32(v[0]);
csf.Max=Convert.ToInt32(v[1]);
return csf;
}
return base.ConvertFrom(context,culture,value);
}
}
现在我们为类型提供类型转换器,我们在类型前面添加一个TypeConverterAttribute,如下:[TypeConverter(typeof(ScopeConverter))]
public class Scope
添加完以后build工程,然后切换到测试工程,选中控件,在属性浏览器里查看属性,现在的Scope属性可以编辑了,如下图所示:
我们修改默认的值,然后看看Form设计器为我们生成了什么代码:
this.myListControl1.BackColor=System.Drawing.SystemColors.ActiveCaptionText;
this.myListControl1.Item.Add(1);
this.myListControl1.Item.Add(2);
this.myListControl1.Item.Add(3);
this.myListControl1.Item.Add(6);
this.myListControl1.Item.Add(8);
this.myListControl1.Item.Add(9);
this.myListControl1.Location=new System.Drawing.Point(12,34);
="myListControl1";
this.myListControl1.Scope=new CustomControlSample.Scope(10,200);
this.myListControl1.Size=new System.Drawing.Size(220,180);
this.myListControl1.TabIndex=1;
this.myListControl1.Text="myListControl1";
关键是这一行this.myListControl1.Scope=new CustomControlSample.Scope(10,200),Scope 类的类型转换器为属性提供了实例化的代码。