创建 Windows 窗体工具箱控件

Visual Studio 扩展性工具 (VSSDK) 包含的 Windows 窗体工具箱控件项目模板允许你创建“工具箱”控件,此控件会在安装扩展后自动添加到工具箱。 本演练演示如何使用模板创建可分发给其他用户的简单计数器控件。

创建工具箱控件

Windows 窗体工具箱控件模板可创建未定义的用户控件,并提供将控件添加到 工具箱所需的全部功能。

使用 Windows 窗体工具箱控件创建扩展

  1. 创建名为 MyWinFormsControl 的 VSIX 项目。 可以通过在新建项目对话框中搜索“vsix”,找到 VSIX 项目模板。

  2. 项目打开时,添加名为 CounterWindows 窗体工具箱控件项目模板。 在“解决方案资源管理器”中,右键单击项目节点并选择“添加”>“新建项”。 在添加新项对话框中,转到 Visual C#>扩展性,并选择 Windows 窗体工具箱控件

  3. 这会添加用户控件,ProvideToolboxControlAttribute RegistrationAttribute 用于将控件放置在工具箱中, Microsoft.VisualStudio.ToolboxControl 资产条目用于部署的 VSIX 清单中。

构建控件的用户界面

Counter 控件需要两个子控件:Label 用于显示当前计数,Button 用于将计数重置为 0。 不需要其他子控件,因为调用方将以编程方式递增计数器。

构建用户界面

  1. 解决方案资源管理器中双击 Counter.cs,以在设计器中打开它。

  2. 删除单击此处 ! 按钮,该按钮在添加 Windows 窗体工具箱控件项目模板时默认包含。

  3. 工具箱中,先将 Label 控件拖到设计图面,然后再将 Button 控件拖到其下方。

  4. 将整个用户控件的大小调整为 150, 50 像素,并将按钮控件的大小设定为 50, 20 像素。

  5. 属性窗口中,为设计图面上的控件设置以下值。

    控件 属性
    Label1 文本 ""
    Button1 Name btnReset
    Button1 文本 重置

对用户控件进行编码

Counter 控件将公开一个用于递增计数器的方法、一个计数器每次递增时均会引发的事件、一个重置按钮,以及分别用于存储当前计数、显示文本及是显示还是隐藏重置按钮的三个属性。 ProvideToolboxControl 特性确定 Counter 控件会出现在“工具箱”的什么位置。

对用户控件进行编码

  1. 双击窗体以在代码窗口中打开其加载事件处理程序。

  2. 在事件处理程序方法上方,在控件类中创建一个整数来存储计数器值,并创建一个字符串来存储显示文本,如下例所示。

    int currentValue;
    string displayText;
    
  3. 创建以下公共属性声明。

    public int Value {
        get { return currentValue; }
    }
    
    public string Message {
        get { return displayText; }
        set { displayText = value; }
    }
    
    public bool ShowReset {
        get { return btnReset.Visible; }
        set { btnReset.Visible = value; }
    }
    
    

    调用方可以访问这些属性以获取和设置计数器的显示文本,并显示或隐藏重置按钮。 调用方可以获取只读 Value 属性的当前值,但不能直接设置该值。

  4. 将以下代码放入控件的 Load 事件中。

    private void Counter_Load(object sender, EventArgs e)
    {
        currentValue = 0;
        label1.Text = Message + Value;
    }
    
    

    Load 事件中设置标签文本可使目标属性在应用其值之前加载。 在构造函数中设置标签文本将导致空标签

  5. 创建以下公共方法以递增计数器。

    public void Increment()
    {
        currentValue++;
        label1.Text = displayText + Value;
        Incremented(this, EventArgs.Empty);
    }
    
    
  6. Incremented 事件的声明添加到控件类中。

    public event EventHandler Incremented;
    

    调用方可以向该事件添加处理程序,以响应计数器值的更改。

  7. 返回到设计视图,然后双击重置按钮以生成 btnReset_Click 事件处理程序。 然后,如下例所示填写。

    private void btnReset_Click(object sender, EventArgs e)
    {
        currentValue = 0;
        label1.Text = displayText + Value;
    }
    
    
  8. 在类定义正上方的 ProvideToolboxControl 特性声明中,将第一个参数的值从 "MyWinFormsControl.Counter" 改为 "General"。 这会设置将在“工具箱” 中托管控件的项组名称。

    以下示例演示了 ProvideToolboxControl 特性和调整后的类定义。

    [ProvideToolboxControl("General", false)]
    public partial class Counter : UserControl
    

测试控件

若要测试工具箱控件,请先在开发环境中测试它,然后在已编译的应用程序中进行测试。

测试控件

  1. F5 开始调试

    此命令将生成项目,并打开已安装此控件的 Visual Studio 的第二个实验实例。

  2. 在 Visual Studio 的实验实例中,创建一个 Windows 窗体应用程序项目。

  3. 解决方案资源管理器中,双击 Form1.cs,以在设计器中打开它(如果尚未打开)。

  4. 工具箱中,Counter 控件应显示在常规部分中。

  5. Counter 控件拖到窗体,然后选择它。 ValueMessageShowReset 属性将与从 UserControl 继承的属性一起显示在属性窗口中。

  6. Message 属性设置为 Count:

  7. Button 控件拖到窗体,然后将按钮的名称和文本属性设置为 Test

  8. 双击按钮,以在代码视图中打开 Form1.cs,并创建单击处理程序。

  9. 在单击处理程序中,调用 counter1.Increment()

  10. 在构造函数中,在调用 InitializeComponent 之后,键入 counter1``.``Incremented +=,然后按 Tab 两次。

    Visual Studio 为 counter1.Incremented 事件生成窗体级处理程序。

  11. 突出显示事件处理程序中的 Throw 语句,键入 mbox,然后按 Tab 两次,从 mbox 代码段生成消息框。

  12. 在下一行中,添加以下if/else块,以设置重置按钮的可见性。

    if (counter1.Value < 5) counter1.ShowReset = false;
    else counter1.ShowReset = true;
    
  13. 按 F5

    窗体会打开。 Counter 控件显示以下文本。

    Count: 0

  14. 选择“测试”。

    计数器递增,Visual Studio 会显示一个消息框。

  15. 关闭消息框。

    重置按钮消失。

  16. 选择测试,直到计数器每次达到 5 关闭消息框。

    重置按钮再次出现。

  17. 选择“重置”

    计数器重置为 0

后续步骤

生成“工具箱”控件时,Visual Studio 将在项目的 \bin\debug\ 文件夹中创建一个名为 ProjectName.vsix 的文件。 可以通过将 .vsix 文件上传到网络或网站来部署此控件。 在用户打开 .vsix 文件时,此控件会安装,并添加到用户计算机上的 Visual Studio 工具箱。 或者,可以将 .vsix 文件上传到 Visual Studio Marketplace,以便用户可以浏览工具>扩展和更新对话框找到它。