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

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

创建项目

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

创建 ValueButtonLib 控件库和 ValueButton 控件

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

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

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

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

  4. 找到class语句行,将继承此控件的类型从public partial class ValueButton更改为UserControlButton。 这样,您的继承控件就可以继承 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. 选择 Visual C# 节点下的 Windows 节点,然后单击 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

    通过< c3 />方法,数字“5”显示在中,表明继承控件的属性已传递到。 因此,你的 ValueButton 控件继承了标准 Windows 窗体按钮的所有功能,但公开了一个附加的自定义属性。

另请参阅