演练:使用 Visual C# 从 Windows 窗体控件继承
来源:互联网 发布:编程开发是什么 编辑:程序博客网 时间:2024/04/29 00:31
演练:使用 Visual C# 从 Windows 窗体控件继承
- Visual Studio 2010
- .NET Framework 3.5
- .NET Framework 2.0
使用 Visual C# 2005 可以通过继承创建功能强大的自定义控件。 通过继承,可以创建不仅保留了标准 Windows 窗体控件的所有内在功能,而且还包含自定义功能的控件。 在本演练中,将创建一个名为ValueButton 的简单继承控件。 此按钮将继承标准 Windows 窗体Button 控件的功能,并将公开一个名为 ButtonValue 的自定义属性。
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。 若要更改设置,请在“工具”菜单上选择“导入和导出设置”。 有关更多信息,请参见Customizing Development Settings in Visual Studio。
创建项目
创建新项目时,应指定其名称以便设置根命名空间、程序集名称和项目名称,并确保默认组件位于正确的命名空间中。
创建 ValueButtonLib 控件库和 ValueButton 控件
在“文件”菜单上,指向“新建”,然后单击“项目”打开“新建项目”对话框。
在 Visual C# 项目列表中,选择“Windows 窗体控件库”项目模板,然后在“名称”框中键入ValueButtonLib。
默认情况下,项目名称 ValueButtonLib 也被分配到根命名空间中。 根命名空间用于限定程序集中的组件名。 例如,如果两个程序集提供名为ValueButton 的组件,则可以使用 ValueButtonLib.ValueButton 指定ValueButton 组件。 有关更多信息,请参见命名空间(C# 编程指南)。
在“解决方案资源管理器”中右击“UserControl1.cs”,再从快捷菜单中选择“重命名”。 将文件名更改为ValueButton.cs。 系统询问是否重命名对代码元素“UserControl1”的所有引用时,单击“是”按钮。
在“解决方案资源管理器”中右击“ValueButton.cs”,再选择“查看代码”。
找到 class 语句行 public partial class ValueButton,并将此控件继承的类型从 UserControl 更改为 Button。 这允许您所继承的控件继承 Button 控件的所有功能。
在“解决方案资源管理器”中打开“ValueButton.cs”节点,以显示设计器生成的代码文件“ValueButton.Designer.cs”。 在“代码编辑器”中打开此文件。
找到 InitializeComponent 方法并删除分配AutoScaleMode 属性的行。 Button 控件中没有此属性。
在“文件”菜单中,选择“全部保存”以保存项目。
注意 可视化设计器不再可用。 由于Button 控件自行绘制,因此您无法在设计器中修改其外观。 除非在代码中进行修改,否则它的可视化表示形式将与它所继承的类(即Button)的可视化表示形式完全一样。 但您仍然可以向设计器图面添加不含 UI 元素的组件。
将属性添加到继承的控件中
继承的 Windows 窗体控件的可能用途之一是创建与标准 Windows 窗体控件的外观相同、但公开自定义属性的控件。 在本节中,将向控件中添加名为ButtonValue 的属性。
添加 Value 属性
在“解决方案资源管理器”中,右击“ValueButton.cs”,然后从快捷菜单中单击“查看代码”。
找到 class 语句。 紧接在{ 后面键入下列代码:
[C#]
复制// 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”节点,再单击“Windows 窗体应用程序”。
在“名称”框中键入 Test。
在“解决方案资源管理器”中,右击测试项目的“引用”节点,然后从快捷菜单上选择“添加引用”以显示“添加引用”对话框。
单击标记为“项目”的选项卡。 “项目名称”下将列出 ValueButtonLib 项目。 双击该项目以将引用添加到测试项目。
在“解决方案资源管理器”中,右击“测试”并选择“生成”。
将控件添加到窗体
在“解决方案资源管理器”中,右击“Form1.cs”,然后从快捷菜单中选择“视图设计器”。
在“工具箱”中单击“ValueButtonLib 组件”。 双击“ValueButton”。
窗体上出现一个“ValueButton”。
右击“ValueButton”并从快捷菜单中选择“属性”。
在“属性”窗口中检查该控件的属性。 注意,除增加了一个ButtonValue 属性外,它们与标准按钮公开的属性相同。
将 ButtonValue 属性设置为5。
在“工具箱”的“所有 Windows 窗体”选项卡中,双击“标签”,将Label 控件添加到窗体中。
将标签重新定位到窗体的中央。
双击 valueButton1。
将响应 valueButton1_Click 事件而打开“代码编辑器”。
插入下面的代码行。
[C#]
复制label1.Text = valueButton1.ButtonValue.ToString();
在“解决方案资源管理器”中,右击“测试”,然后从快捷菜单中选择“设为启动项目”。
从“调试”菜单中选择“启动调试”。
Form1 出现。
单击 valueButton1。
label1 中显示数字“5”,说明继承控件的ButtonValue 属性已经通过 valueButton1_Click 方法传递到label1。 这样,ValueButton 控件便继承了标准 Windows 窗体按钮的所有功能,但是公开了一个附加的自定义属性。
- 演练:使用 Visual C# 从 Windows 窗体控件继承
- 使用 Visual Basic 从 Windows 窗体控件继承
- 调试使用 Visual Basic .NET 或 Visual C# .NET 创建的Windows窗体控件
- 调试使用 Visual Basic .NET 或 Visual C# .NET 创建的Windows窗体控件
- 演练:使用Visual C#创作组件
- 演练:从 Windows 窗体调用 XML Web services
- Visual C#演练
- 演练:使用Visual Basic或Visual C#创建Web服务
- 演练:使用Visual Basic或Visual C#访问Web服务
- 使用两个 Windows 窗体 DataGridView 控件创建一个主/从窗体
- 演练:在 Windows 窗体中承载 Windows Presentation Foundation 复合控件 【转载】
- Panel 控件概述(Windows 窗体)c#
- 在运行时添加 Windows 窗体控件 (Visual Basic)
- 为 Windows 窗体控件创建工具提示 (Visual Basic)
- 确定 Windows 窗体 DataGrid 控件中的选定单元格 (Visual Basic)
- 从其他 Windows 窗体获取值 (Visual Basic)
- 从"在 Internet Explorer 中使用 Windows 窗体控件"开始谈Smart Client
- 从“在Internet Explorer 中使用Windows窗体控件”谈Smart Client
- Caused by: java.lang.ClassNotFoundException: Didn't find class "net.oschina.app.AppContext" on path:
- 秒杀系统
- 面向对象的特征有哪些方面
- 焦点图的实现
- 线性代数个人系统总结(摘抄,来源多,侵删)
- 演练:使用 Visual C# 从 Windows 窗体控件继承
- SpringMVC中实现文件上传
- 求图中最短路径算法之Dijkstra算法——C++实现并优化
- WebSocket
- C语言基础 有初始值的个数来决定数组大小的定义方式
- 自定义加载等待动画,仿金山词霸
- HBase 单机版
- Cinnamon in Centos7.2 试用体验
- [从头读历史] 第267节 诗经 邶风