创建Windows 窗体工具箱控件

Visual Studio 扩展性工具(VS SDK)中包含的Windows 窗体工具箱控件项模板可用于创建安装扩展时自动添加的工具箱控件。 本演练演示如何使用模板创建可分发给其他用户的简单计数器控件。

创建工具箱控件

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

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

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

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

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

为控件生成用户界面

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 控件拖到窗体,然后选择它。 ShowResetMessage属性Value和属性将显示在“属性”窗口中,以及继承自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 控件显示以下文本。

    计数:0

  14. 选择“测试”。

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

  15. 关闭消息框。

    重置” 按钮消失。

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

    重置 ”按钮再次出现。

  17. 选择“重置”

    计数器重置为 0

后续步骤

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