当前位置:文档之家› C#创建用户控件

C#创建用户控件

演练:使用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;}}添加到控件的图形界面继承的控件具有可视化的界面,该界面与它从中继承的控件的界面完全相同。

相关主题