创建 ValueButtonLib 控件库和 ValueButton 控件 在“文件”菜单上,指向“新建”,然后单击“项目”以打开“新建项目”对话框。
在“C# 项目”列表中,选择“Windows 控件库”项目模板,然后在“名称”框中键入 ValueButtonLib。
注意 Windows 控件库模板在 Visual Basic 和 Visual C# .NET 的标准版中不可用。有关更多信息,请参阅 Visual Basic 标准版功能或 Visual C# 标准版的功能。
默认情况下,项目名称 ValueButtonLib 也会分配到根命名空间中。根命名空间用于限定程序集中的组件名。例如,如果两个程序集都提供名为 ValueButton 的组件,则可以使用 ValueButtonLib.ValueButton 指定 ValueButton 组件。
在解决方案资源管理器中,右击 UserControl1.cs,并从快捷菜单中选择“查看代码”。
找到 class 语句 public class UserControl1,将 UserControl1 更改为 ValueButton 以更改组件的名称。
找到构造函数 public UserControl1(),将它更改为 public ValueButton()。
在 Class 语句,将该控件从 System.Windows.Forms.UserControl 继承的类型更改为 System.Windows.Forms.Button。这允许继承的控件继承 Button 控件的所有功能。
在解决方案资源管理器中,单击 UserControl1.cs,并在“属性”窗口中,将 FileName 属性更改为 ValueButton.cs。
从“文件”菜单中,选择“全部保存”来保存项目。
注意,设计器已不再可用。因为 Button 控件自己完成绘制,所以无法在设计器中修改它的外观。除非在代码中对其进行修改,否则它的可视化表示形式将与它从中继承的类(即 Button)的表示形式完全相同。 将属性添加到继承的控件中
继承的 Windows 窗体控件的可能用途之一是创建与标准 Windows 窗体控件的外观相同、但公开自定义属性的控件。在本节中,您将向控件中添加名为 ButtonValue 的属性。添加 Value 属性 在解决方案资源管理器中,右击“ValueButton.cs”,然后在快捷菜单中单击“查看代码”。
找到 class 语句。在紧靠 { 的后面键入下面的代码:
// Creates the private variable that will store the value of your
// property.
private int varValue;
// Declares the property.
public int ButtonValue
{
// Sets the method for retrieving the value of your property.
get
{
return varValue;
}
// Sets the method for setting the value of your property.
set
{
varValue = value;
}
}
此代码设置存储和检索 ButtonValue 属性的方法。get 语句设置返回到存储在私有变量 varValue 中的值的值,set 语句通过使用 value 关键字设置私有变量的值。 从“文件”菜单中,选择“全部保存”来保存项目。
测试控件
控件不是独立的项目,它们必须寄宿在容器中。若要测试控件,必须提供一个运行该控件的测试项目。还必须通过生成(编译)该控件使其可由测试项目访问。在本节中,您将生成控件,并在 Windows 窗体中对其进行测试。生成控件 在“生成”菜单上单击“生成”。
生成应成功,不存在任何编译器错误或警告。 创建测试项目 在“文件”菜单上,指向“添加项目”,然后单击“新建项目”以打开“添加新项目”对话框。
选择“Visual C# 项目”节点,然后单击“Windows 应用程序”。
在“名称”框中键入 Test。
在解决方案资源管理器中,右击测试项目的“引用”节点,然后从快捷菜单中选择“添加引用”以显示“添加引用”对话框。
单击标记为“项目”的选项卡。
双击 ValueButtonLib 项目,并注意该项目此时出现在“选定的组件”窗格中。
添加引用后,应将新控件添加到工具箱。如果您的控件已经出现在工具箱中,则应该跳过下一节。 将控件添加到工具箱 右击工具箱,然后从快捷菜单中选择“自定义工具箱”。
“自定义工具箱”对话框打开。 选择“.NET 框架组件”选项卡并单击“浏览”。浏览到 ValueButtonLib\bin\debug 文件夹并选择 ValueButton.dll。
ValueButton 出现在“自定义工具箱”对话框的组件列表中。 在“自定义工具箱”对话框中,单击 ValueButton 旁的框并关闭窗口。
ValueButton 被添加到选定的工具箱的选项卡上。 将控件添加到窗体 在解决方案资源管理器中,右击“Form1.cs”,然后从快捷菜单中选择“视图设计器”。
在工具箱中,向下滚动直到到达标记为 ValueButton 的图标。双击该图标。
窗体上显示一个“ValueButton”。 右击“ValueButton”并从快捷菜单中选择“属性”。
在“属性”窗口中检查该控件的属性。注意,它们与标准按钮公开的属性相同,不同的是有一个附加属性 ButtonValue。
将 ButtonValue 属性设置为 5。
在“工具箱”的“Windows 窗体”选项卡中,双击“标签”将 Label 控件添加到窗体中。
将标签重新定位到窗体中心。
双击 valueButton1。
代码编辑器打开并显示 ValueButton1_Click 事件。 键入以下代码行。
label1.Text = valueButton1.ButtonValue.ToString();
在解决方案资源管理器中,右击“测试”,然后从快捷菜单中选择“设为启动项目”。
从“调试”菜单中选择“启动”。
出现 Form1。 单击 valueButton1。
Label1 中显示数字“5”,说明继承控件的 ButtonValue 属性已经通过 ValueButton1_Click 方法传递到 Label1。这样,ValueButton 控件便继承了标准 Windows 窗体按钮的所有功能,但是公开了一个附加的自定义属性。啊~~~~~~~~ 搞定
在“C# 项目”列表中,选择“Windows 控件库”项目模板,然后在“名称”框中键入 ValueButtonLib。
注意 Windows 控件库模板在 Visual Basic 和 Visual C# .NET 的标准版中不可用。有关更多信息,请参阅 Visual Basic 标准版功能或 Visual C# 标准版的功能。
默认情况下,项目名称 ValueButtonLib 也会分配到根命名空间中。根命名空间用于限定程序集中的组件名。例如,如果两个程序集都提供名为 ValueButton 的组件,则可以使用 ValueButtonLib.ValueButton 指定 ValueButton 组件。
在解决方案资源管理器中,右击 UserControl1.cs,并从快捷菜单中选择“查看代码”。
找到 class 语句 public class UserControl1,将 UserControl1 更改为 ValueButton 以更改组件的名称。
找到构造函数 public UserControl1(),将它更改为 public ValueButton()。
在 Class 语句,将该控件从 System.Windows.Forms.UserControl 继承的类型更改为 System.Windows.Forms.Button。这允许继承的控件继承 Button 控件的所有功能。
在解决方案资源管理器中,单击 UserControl1.cs,并在“属性”窗口中,将 FileName 属性更改为 ValueButton.cs。
从“文件”菜单中,选择“全部保存”来保存项目。
注意,设计器已不再可用。因为 Button 控件自己完成绘制,所以无法在设计器中修改它的外观。除非在代码中对其进行修改,否则它的可视化表示形式将与它从中继承的类(即 Button)的表示形式完全相同。 将属性添加到继承的控件中
继承的 Windows 窗体控件的可能用途之一是创建与标准 Windows 窗体控件的外观相同、但公开自定义属性的控件。在本节中,您将向控件中添加名为 ButtonValue 的属性。添加 Value 属性 在解决方案资源管理器中,右击“ValueButton.cs”,然后在快捷菜单中单击“查看代码”。
找到 class 语句。在紧靠 { 的后面键入下面的代码:
// Creates the private variable that will store the value of your
// property.
private int varValue;
// Declares the property.
public int ButtonValue
{
// Sets the method for retrieving the value of your property.
get
{
return varValue;
}
// Sets the method for setting the value of your property.
set
{
varValue = value;
}
}
此代码设置存储和检索 ButtonValue 属性的方法。get 语句设置返回到存储在私有变量 varValue 中的值的值,set 语句通过使用 value 关键字设置私有变量的值。 从“文件”菜单中,选择“全部保存”来保存项目。
测试控件
控件不是独立的项目,它们必须寄宿在容器中。若要测试控件,必须提供一个运行该控件的测试项目。还必须通过生成(编译)该控件使其可由测试项目访问。在本节中,您将生成控件,并在 Windows 窗体中对其进行测试。生成控件 在“生成”菜单上单击“生成”。
生成应成功,不存在任何编译器错误或警告。 创建测试项目 在“文件”菜单上,指向“添加项目”,然后单击“新建项目”以打开“添加新项目”对话框。
选择“Visual C# 项目”节点,然后单击“Windows 应用程序”。
在“名称”框中键入 Test。
在解决方案资源管理器中,右击测试项目的“引用”节点,然后从快捷菜单中选择“添加引用”以显示“添加引用”对话框。
单击标记为“项目”的选项卡。
双击 ValueButtonLib 项目,并注意该项目此时出现在“选定的组件”窗格中。
添加引用后,应将新控件添加到工具箱。如果您的控件已经出现在工具箱中,则应该跳过下一节。 将控件添加到工具箱 右击工具箱,然后从快捷菜单中选择“自定义工具箱”。
“自定义工具箱”对话框打开。 选择“.NET 框架组件”选项卡并单击“浏览”。浏览到 ValueButtonLib\bin\debug 文件夹并选择 ValueButton.dll。
ValueButton 出现在“自定义工具箱”对话框的组件列表中。 在“自定义工具箱”对话框中,单击 ValueButton 旁的框并关闭窗口。
ValueButton 被添加到选定的工具箱的选项卡上。 将控件添加到窗体 在解决方案资源管理器中,右击“Form1.cs”,然后从快捷菜单中选择“视图设计器”。
在工具箱中,向下滚动直到到达标记为 ValueButton 的图标。双击该图标。
窗体上显示一个“ValueButton”。 右击“ValueButton”并从快捷菜单中选择“属性”。
在“属性”窗口中检查该控件的属性。注意,它们与标准按钮公开的属性相同,不同的是有一个附加属性 ButtonValue。
将 ButtonValue 属性设置为 5。
在“工具箱”的“Windows 窗体”选项卡中,双击“标签”将 Label 控件添加到窗体中。
将标签重新定位到窗体中心。
双击 valueButton1。
代码编辑器打开并显示 ValueButton1_Click 事件。 键入以下代码行。
label1.Text = valueButton1.ButtonValue.ToString();
在解决方案资源管理器中,右击“测试”,然后从快捷菜单中选择“设为启动项目”。
从“调试”菜单中选择“启动”。
出现 Form1。 单击 valueButton1。
Label1 中显示数字“5”,说明继承控件的 ButtonValue 属性已经通过 ValueButton1_Click 方法传递到 Label1。这样,ValueButton 控件便继承了标准 Windows 窗体按钮的所有功能,但是公开了一个附加的自定义属性。啊~~~~~~~~ 搞定
解决方案 »
- datatable添加空值
- Convert.FromBase64String()这个函数如何使用的?
- 前几天书店看到。net3.5 郁闷的要死了!
- 读取xml 的两个问题
- 在C#中,OleDbDataReader 能否返回挑选记录的总数?
- 我在使用C#链接到SQL数据库时出现如下问题,请高手帮忙解决
- 高分求:c#winform如何自定义打印模板,用户可以自己编辑模板,然后打印,还有是用户如何可以自己控制打印内容的位置,在打印的时候可以
- 关于ParameterDirection的疑惑
- [求助]c#中无边框窗体数个,同一个panel中如何点击某个窗体的任意位置就前置这个窗体,相当于窗体切换
- 接口——用途!
- override和new有什么区别?
- 动态添加一个usercontrol在panel里时,怎么设置它在panel里的位置?
is my new id (not enough scores to ask questions)
如版本--不可能一次就做得完全的.每次都要生成DLL,比较麻烦.
性能速度--或者可以忽略.
在工作过程中,生成OCX 或DLL 都很不方便,每次改动OCX后都要重生成.这可涉及版本升级的问题.有时会导致版本不谦容的问题.最好C#能实现像VFP的那种可视类就好了.
在.NET中, 系统不再使用登录数据库(Registry)来维护DLL的位置和版本信息
,所有DLL文件都程序放到同一个目录里, 使得DLL Hell 的问题不再,另外,由于在ASP.NET下 IIS不再锁定DLL文件,因此 你可以在服务不中断的情况下直接升级DLL(不用重新注册在启动IIS,将新版DLL拷贝过去就可以了)