演练:使用Visual C# 创作用户控件Visual Studio .NET 2003用户控件提供了一种创建和重用自定义图形界面的方法。
用户控件本质上是具有可视化表示形式的组件。
因此,它可能包含一个或多个Windows 窗体控件、组件或代码块,它们能够通过验证用户输入、修改显示属性或执行作者所需的其他任务来扩展功能。
可以按照与其他控件相同的方式,将用户控件置于Windows 窗体中。
在本演练的第一部分,创建一个名为ctlClock 的简单用户控件。
在本演练的第二部分通过继承扩展ctlClock 的功能。
创建项目创建新的项目时应指定其名称,以设置根命名空间、程序集名称和项目名称,并确保默认组件将位于正确的命名空间中。
创建ctlClockLib 控件库和ctlClock 控件1.在“文件”菜单上,指向“新建”,然后选择“项目”以打开“新建项目”对话框。
2.从“C# 项目”列表中选择“Windows 控件库”项目模板,然后在“名称”框中键入ctlClockLib。
注意“Windows 控件库”模板在Visual C# .NET 的标准版中不可用。
有关更多信息,请参见Visual C# 标准版的功能。
默认情况下,项目名称ctlClockLib也被分配到根命名空间中。
根命名空间用于限定程序集中的组件名。
例如,如果两个程序集都提供名为ctlClock 的组件,则可以使用ctlClockLib.ctlClock指定ctlClock 组件。
在解决方案资源管理器中,右击“UserControl1”并从快捷菜单中选择“查看代码”。
3.找到Class语句public class UserControl1,将UserControl1更改为ctlClock以更改组件的名称。
注意默认情况下,用户控件从系统提供的UserControl类继承。
UserControl类提供所有用户控件要求的功能,并实现标准方法和属性。
4.找到构造函数public UserControl1(),将UserControl1 更改为ctlClock。
5.在解决方案资源管理器中,单击“UserControl1”,然后在“属性”窗口中,将FileName属性更改为ctlClock.cs。
6.从“文件”菜单中,选择“全部保存”来保存项目。
将Windows 控件和组件添加到用户控件可视化界面是用户控件的基本部分。
这种可视化界面是通过将一个或多个Windows 控件添加到“用户控件设计器”中实现的。
在下面的演示中,将向用户控件中加入Windows 控件,并编写代码以实现功能。
将标签和计时器添加到用户控件中1.在解决方案资源管理器中,右击“ctlClock.cs”,然后选择“视图设计器”。
2.在工具箱中,单击“Windows 窗体”选项卡,然后双击label。
名为label1的标签控件被添加到用户控件设计器上的控件中。
3.在设计器中,单击label1。
在“属性”窗口中,设置下列属性。
4.在“工具箱”中,单击“Windows 窗体”,然后双击“计时器”。
因为计时器是个组件,所以它在运行时没有可视化的表示形式。
因此,它不与其他控件一起出现在“用户控件设计器”上,而是出现在组件栏中。
5.在组件栏中,单击timer1,并将Interval属性设置为1000,将Enabled属性设置为true。
Interval属性控制计时器组件的刻度频率。
timer1每走过一个刻度,它都会运行一次Timer1_Tick事件中的代码。
interval 表示前后两次刻度之间的毫秒数。
6.在组件栏中,双击timer1以转到ctlClock 的timer1_Tick事件。
7.将该代码修改为类似如下所示的代码示例。
请确保将访问修饰符从private更改为protected:protected void timer1_Tick(object sender, System.EventArgs e){// Causes the label to display the current timelblDisplay.Text = DateTime.Now.ToLongTimeString();}这些代码将使得当前时间显示在lblDisplay中。
因为timer1的间隔设置为1000,所以该事件每隔1000 毫秒激发一次,从而每隔一秒就更新一次当前时间。
8.用virtual关键字修改该方法使其可重写。
有关更多信息,请参见本主题的下一节“从用户控件继承”。
protected virtual void timer1_Tick(object sender, System.EventArgs e)9.从“文件”菜单中,选择“全部保存”来保存项目。
将属性添加到用户控件中现在,clock 控件封装了Label控件和Timer组件,每个都有其自己的继承属性组。
尽管您的控件的后续用户无法访问这些控件的个别属性,但可以通过编写适当的代码块来创建和公开自定义属性。
在下面的章节中,您将向控件中添加属性,这些属性使用户能够更改背景和文本的颜色。
将属性添加到用户控件中1.在解决方案资源管理器中,右击“ctlClock.cs”,然后从快捷菜单中单击“查看代码”。
控件的代码编辑器打开。
2.找到public class ctlClock 语句。
在开始的{ 后面,键入:private Color colFColor;private Color colBColor;这些语句会创建私有变量,用来存储要创建的属性的值。
3.在步骤2 中的变量声明下方键入以下代码:// Declares the name and type of the property.public Color ClockBackColor// Retrieves the value of the private variable colBColor.{get{return colBColor;}// Stores the selected value in the private variable colBColor, and// updates the backcolor of the label control lblDisplay.set{colBColor = value;lblDisplay.BackColor = colBColor;}}// Provides a similar set of instructions for the forecolor.public Color ClockForeColor{get{return colFColor;}set{colFColor = value;lblDisplay.ForeColor = colFColor;}}前述的代码使两个自定义属性(ClockForeColor 和ClockBackColor)可用于该控件后面的用户。
Get和Set语句提供属性值的存储和检索,以及提供实现适合于属性的功能的代码。
4.从“文件”菜单中,选择“全部保存”来保存项目。
测试控件控件不是独立的应用程序,它们必须寄宿在容器中。
为了测试控件,必须提供一个在其中运行该控件的测试项目。
在本节中,将生成控件并在Windows 窗体中测试它。
生成控件在“生成”菜单上单击“生成”。
创建测试项目1.在“文件”菜单上,指向“添加项目”,然后单击“新建项目”以打开“添加新项目”窗口。
2.单击“Windows 应用程序”,然后在“名称”框中,键入Test。
3.在解决方案资源管理器中,右击测试项目的“引用”节点。
单击“添加引用”,显示“添加引用”对话框。
4.单击标记为“项目”的选项卡。
用户控件项目将在“项目名称”下列出。
5.双击您的项目。
注意,此时该项目显示在“选定的组件”窗口中。
在添加引用之后,可以将控件置于您的窗体中。
测试控件1.在“工具箱”中,单击“我的用户控件”,然后向下滚动,直到显示表示ctlClock的控件图标为止。
2.双击ctlClock图标。
现在,您的控件的副本被添加到窗体中。
请注意,它显示当前时间,并且每秒更新一次。
3.在工具箱中,选择该图标,然后将鼠标移动到您的窗体上。
4.按住鼠标左键,同时在窗体上移动鼠标。
控件的另一个副本被拖放到窗体上。
可以根据需要将任意数目的计时器副本添加到您的窗体上。
5.在设计器中,单击ctlClock的实例之一。
该实例的属性显示在“属性”窗口中。
6.在“属性”窗口中,找到ClockBackColor属性,然后选择属性以显示调色板。
7.通过单击某个颜色来选择它。
控件的背景颜色更改为您选择的颜色。
8.使用类似的事件序列来验证ClockForeColor属性的功能是否与预期的一样。
在本节中,您已经知道组件和Windows 控件如何与代码和打包结合,以用户控件的形式提供自定义功能。
您已经学会在用户控件中公开属性,以及如何在完成后测试控件。
在下一节中,您将学习如何将ctlClock用作基来构造继承的用户控件。
从用户控件中继承在上一节中,您已经学会如何将Windows 控件、组件和代码组合成可重用的用户控件。
现在,您的用户控件可以用作生成其他控件的基础。
从基类派生类的过程称为“继承”。
在本节中,将创建称为ctlAlarmClock 的用户控件。
此控件将从其父控件ctlClock 中派生。
您将学习通过重写父级方法并添加新的方法和属性来扩展ctlClock 的功能。
创建继承的控件创建继承控件的第一步是从它的父控件派生。
该操作创建一个新控件,它具有父控件的全部属性、方法和图形特征,但也可以用作添加新功能或修改过的功能的基础。
创建继承的控件1.在解决方案资源管理器中,单击ctlClockLib。
2.从“项目”菜单中,选择“添加继承的控件”。
“添加新项”窗口打开,这时“继承的用户控件”已选中。
3.在“名称”框中,键入ctlAlarmClock.cs,然后单击“打开”。
“继承选择器”窗口出现。
4.在“组件名称”下,双击ctlClock。
5.在解决方案资源管理器中,浏览当前项目。
注意,已添加一个称为ctlAlarmClock的文件。
添加Alarm 属性将属性添加到继承的控件的方法与添加到用户控件的方法相同。
现在将使用属性声明语法向控件中添加两个属性:AlarmTime和AlarmSet,前者将存储发出警报的日期和时间值,后者将指示是否设置了警报。
将属性添加到用户控件中1.在解决方案资源管理器中,右击ctlAlarmClock并选择“查看代码”。
2.找到public class 语句。
注意,控件从ctlClockLib.ctlClock继承。
在{ 语句下面键入下列代码:private DateTime dteAlarmTime;private bool blnAlarmSet;// These properties will be declared as public to allow future// developers to access them.public DateTime AlarmTime{get{return dteAlarmTime;}set{dteAlarmTime = value;}}public bool AlarmSet{get{return blnAlarmSet;}set{blnAlarmSet = value;}}添加到控件的图形界面继承的控件具有可视化的界面,该界面与它从中继承的控件的界面完全相同。