ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于.NET的Windows窗体编程之WinForms自定义控件(1)

基于.NET的Windows窗体编程之WinForms自定义控件(1) 在实际应用开发中可能UI框架的默认控件已经不能满足实际的应用需求或者某些功能被大量的重复应用如果每一个使用的地方都书写大量的重复代码则不仅会浪费精力且让维护变得复杂此时就需要将包含特定功能的部分封装成控件便于重复使用。自定义控件就像造轮子轮子造好以后别的地方可以一键复用。今天我们以一些简单的小例子简述基于.NET的Windows窗体编程中自定义控件的相关应用仅供学习分享使用如有不足之处还请指正。概述一般而言自定义控件是在Visual Studio提供的默认控件不能满足实际的工作需要才需要在现有控件的基础之上进行新的扩展来实现自己的功能。自定义控件有自己特有的属性事件方法来支撑特定的功能。自定义控件封装实现的细节可以进行方便的复用。自定义控件主要有以下三种分类本例采用的是第三种。用户控件User Control又称之为复合控件Composite Controls将现有的各种控件组合起来形成一个新的控件来满足用户的需求。复合控件的设计方式与窗体类似具有可视化设计器。 通过视觉设计器创建、排列和修改构成控件。 控件事件和逻辑的编写方式与设计窗体时完全相同。 用户控件与其他任何控件一样放置在表单上。扩展控件Extended Controls就是在现有的控件基础上派生出一个新的控件增加新的功能或者修改原有功能来满足用户需求。自定义控件Custom Controls就是直接从UserControl类派生也就是说完全由自己来设计、实现一个全新的控件这是最灵活、最强大的方法。今天主要讲解用户控件至于扩展控件和自定义控件在后续篇幅继续讲解。用户控件用户控件是封装在通用容器中的 Windows 窗体控件的集合。 此类控件称为 复合控件。 其包含的控件称为构成控件。 复合控件派生自 UserControl 类。自定义的复合控件可以在创建它们的项目中使用也可以在引用这些用户控件库的其他项目中使用。用户控件的代码实现模式是事件转发- 将事件从内部控件传递到使用者。属性公开- 允许使用者访问内部控制属性。逻辑行为- 处理内部控件之间的交互。创建用户控件由于用户控件可以在创建它的项目中使用也可也可以在引用这些用户控件库的其他项目中使用所以为了将用户控件单独存放我们创建一个独立的用户控件库并命名为“Okcoder.WinForm.UserControls”。选择控件库然后点击右键在弹出的快捷菜单中选择“添加”然后选择“用户控件(Windows窗体)(U)...”如下图所示在弹出的“添加新项”对话框中选择“用户控件(Windows窗体)”然后输入名称点击“添加”按钮即可如下图所示在本示例中用户控件名称为“ClearableTextBox”主要功能为设计一个可清除文本框。首先设计用户空间的页面它包括如下几部分一个Label用于显示用户控件的标题命名为“lblTitle”一个文本框用于用户输入内容命名为“txtValue”一个按钮用于点击按钮清除文本框的内容命名为“btnClear”布局后页面如下所示公开属性打开用户控件的后台代码页面添加两个属性主要用于公开Title属性可以让应用控件的地方获取或设置控件的标题并将Title属性和显示在lblTitle上。公开Text属性可以让应用控件的地方获取和设置控件的文本框内容并将Text属性和txtValue相关联。具体公开属性如下所示[Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public string Title { get lblTitle.Text; set lblTitle.Text value; } [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public new string Text { get txtValue.Text; set txtValue.Text value; }事件转发增加TextChanged事件并将此事件注册到文本框的TextChanged事件中当应用用户的控件程序注册TextChanged事件时就可以响应文本框的文本变化。如下所示[Browsable(true)] public new event EventHandler? TextChanged { add txtValue.TextChanged value; remove txtValue.TextChanged - value; }封装逻辑行为封装清除按钮的逻辑为btnClear按钮增加Click事件的处理逻辑如下所示private void btnClear_Click(object sender, EventArgs e) { Text ; }应用用户控件用户控件创建完成且项目编译成功后在需要应用用户控件的项目引用控件库“Okcoder.WinForm.UserControls”就可以在工具箱中看到创建的自定义控件然后拖动控件到Form表单中如下所示分别设置拖动到页面的两个用户控件的标题为First NameLast Name然后注册两个控件的TextChanged事件如下所示在Form表单的后台代码中为用户控件的TextChanged事件添加处理逻辑当用户内容发生变化时将内容显示在名称为“lblFullName”的Lable上如下所示namespace Okcoder.WinForm.Demo { public partial class FrmUserControls : Form { public FrmUserControls() { InitializeComponent(); } private void UpdateNameLabel() { if (string.IsNullOrWhiteSpace(ctlFirstName.Text) || string.IsNullOrWhiteSpace(ctlLastName.Text)) lblFullName.Text Please fill out both the first name and the last name.; else lblFullName.Text $Hello {ctlFirstName.Text} {ctlLastName.Text}, I hope youre having a good day.; } private void ctlFirstName_TextChanged(object sender, EventArgs e) { UpdateNameLabel(); } private void ctlLastName_TextChanged(object sender, EventArgs e) { UpdateNameLabel(); } private void FrmUserControls_Load(object sender, EventArgs e) { UpdateNameLabel(); } } }运行实例运行实例效果如下所示以上就是《基于.NET的Windows窗体编程之WinForms自定义控件(1)》的全部内容旨在抛砖引玉一起学习共同进步
返回列表