步骤演练:使用 C# 从 Windows 窗体控件继承

使用 C#,您可以通过 继承创建强大的自定义控件。 通过继承,你可以创建保留标准 Windows 窗体控件的所有固有功能的控件,但也包含自定义功能。 在本演练中,你将创建一个名为 ValueButton的简单继承控件。 此按钮将从标准 Windows 窗体 Button 控件继承功能,并公开名为 ButtonValue的自定义属性。

创建项目

创建新项目时,请指定其名称以设置根命名空间、程序集名称和项目名称,并确保默认组件位于正确的命名空间中。

创建 ValueButtonLib 控件库和 ValueButton 控件

  1. 在 Visual Studio 中, 项目创建新的 Windows 窗体控件库,并将其命名 ValueButtonLib

    默认情况下,项目名称 ValueButtonLib也分配给根命名空间。 根命名空间用于限定程序集中的组件名称。 例如,如果两个程序集提供名为 ValueButton的组件,则可以使用 ValueButtonLib.ValueButton指定 ValueButton 组件。 有关详细信息,请参阅 命名空间

  2. 在解决方案资源管理器中,右键单击 UserControl1.cs,然后从快捷菜单中选择 重命名。 将文件名更改为 ValueButton.cs。 当系统询问是否要重命名代码元素“UserControl1”的所有引用时,请单击 按钮。

  3. 解决方案资源管理器中,右键单击 ValueButton.cs 并选择 查看代码

  4. 找到 class 语句行、public partial class ValueButton,并将此控件从 UserControl 继承的类型更改为 Button。 这样,继承的控件就可以继承 Button 控件的所有功能。

  5. 解决方案资源管理器中,打开 ValueButton.cs 节点以显示设计器生成的代码文件,ValueButton.Designer.cs。 在 代码编辑器中打开此文件。

  6. 找到 InitializeComponent 方法并删除分配 AutoScaleMode 属性的行。 Button 控件中不存在此属性。

  7. 从“文件”菜单中,选择 “全部保存” 以保存项目。

    注意

    视觉对象设计器不再可用。 由于 Button 控件执行自己的绘制,因此无法在设计器中修改其外观。 除非在代码中修改,否则其视觉表示形式将与它继承的类(即 Button)完全相同。 你仍然可以将没有 UI 元素的组件添加到设计图面。

将属性添加到继承的控件

继承的 Windows 窗体控件的一种可能用法是创建在标准 Windows 窗体控件的外观上完全相同的控件,但公开自定义属性。 在本部分中,你将向控件添加一个名为“ButtonValue”的属性。

添加 Value 属性

  1. 解决方案资源管理器中,右击 ValueButton.cs,然后单击快捷菜单中 查看代码

  2. 找到 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 关键字设置私有变量的值。

  3. “文件”菜单中,选择“全部保存”以保存项目。

测试控制

控件不是独立项目;它们必须托管在容器中。 为了测试你的控制,必须提供一个测试项目以便运行。 您还必须通过生成(编译)该控件,使其可以被测试项目访问。 在本部分中,你将生成控件并在 Windows 窗体中对其进行测试。

构建控件

生成 菜单上,单击 生成解决方案。 生成应成功,且没有编译器错误或警告。

创建测试项目

  1. 在“文件”菜单上,指向“添加”,然后单击“新建项目”,以打开“添加新项目”对话框。

  2. 选择 Windows 节点,在 Visual C# 节点下,单击 Windows 窗体应用程序

  3. 名称 框中,输入 测试

  4. 解决方案资源管理器中,右键单击测试项目的 引用 节点,然后从快捷菜单中选择 添加引用 以显示 添加引用 对话框。

  5. 单击标记为 项目的选项卡。 您的 ValueButtonLib 项目将在 项目名称下列出。 双击项目以添加对测试项目的引用。

  6. 解决方案资源管理器中, 右键单击 测试 并选择 生成

将控件添加到窗体

  1. 解决方案资源管理器中,右键单击 Form1.cs,然后从快捷菜单中选择 视图设计器

  2. 工具箱中,选择 ValueButtonLib 组件。 双击 ValueButton

    ValueButton 出现在窗体上。

  3. 右键单击 ValueButton,然后从快捷菜单中选择 属性

  4. 属性 窗口中,检查此控件的属性。 请注意,它们与标准按钮公开的属性相同,只是多了一个名为 ButtonValue 的附加属性。

  5. ButtonValue 属性设置为 5

  6. 工具箱的 “所有 Windows 窗体” 选项卡中,双击 标签 以向窗体添加 Label 控件。

  7. 将标签重新定位到窗体的中心。

  8. 双击 valueButton1

    代码编辑器 将打开 valueButton1_Click 事件。

  9. 插入以下代码行。

    label1.Text = valueButton1.ButtonValue.ToString();
    
  10. 解决方案资源管理器中,右键单击 测试,然后从快捷菜单中选择 “设置为启动项目”

  11. 在“调试”菜单中,选择 开始调试

    Form1 出现。

  12. 单击 valueButton1

    数字“5”显示在 label1中,表明继承控件的 ButtonValue 属性已通过 valueButton1_Click 方法传递给 label1。 因此,ValueButton 控件继承了标准 Windows 窗体按钮的所有功能,但公开了其他自定义属性。

另请参阅