创建 Windows 窗体工具箱控件
Visual Studio 扩展性工具 (VSSDK) 包含的 Windows 窗体工具箱控件项目模板允许你创建“工具箱”控件,此控件会在安装扩展后自动添加到工具箱。 本演练演示如何使用模板创建可分发给其他用户的简单计数器控件。
创建工具箱控件
Windows 窗体工具箱控件模板可创建未定义的用户控件,并提供将控件添加到 工具箱所需的全部功能。
使用 Windows 窗体工具箱控件创建扩展
创建名为
MyWinFormsControl
的 VSIX 项目。 可以通过在新建项目对话框中搜索“vsix”,找到 VSIX 项目模板。项目打开时,添加名为
Counter
的 Windows 窗体工具箱控件项目模板。 在“解决方案资源管理器”中,右键单击项目节点并选择“添加”>“新建项”。 在添加新项对话框中,转到 Visual C#>扩展性,并选择 Windows 窗体工具箱控件这会添加用户控件,
ProvideToolboxControlAttribute
RegistrationAttribute 用于将控件放置在工具箱中, Microsoft.VisualStudio.ToolboxControl 资产条目用于部署的 VSIX 清单中。
构建控件的用户界面
Counter
控件需要两个子控件:Label 用于显示当前计数,Button 用于将计数重置为 0。 不需要其他子控件,因为调用方将以编程方式递增计数器。
构建用户界面
在解决方案资源管理器中双击 Counter.cs,以在设计器中打开它。
删除单击此处 ! 按钮,该按钮在添加 Windows 窗体工具箱控件项目模板时默认包含。
从工具箱中,先将
Label
控件拖到设计图面,然后再将Button
控件拖到其下方。将整个用户控件的大小调整为 150, 50 像素,并将按钮控件的大小设定为 50, 20 像素。
在属性窗口中,为设计图面上的控件设置以下值。
控件 属性 值 Label1
文本 "" Button1
Name btnReset Button1
文本 重置
对用户控件进行编码
Counter
控件将公开一个用于递增计数器的方法、一个计数器每次递增时均会引发的事件、一个重置按钮,以及分别用于存储当前计数、显示文本及是显示还是隐藏重置按钮的三个属性。 ProvideToolboxControl
特性确定 Counter
控件会出现在“工具箱”的什么位置。
对用户控件进行编码
双击窗体以在代码窗口中打开其加载事件处理程序。
在事件处理程序方法上方,在控件类中创建一个整数来存储计数器值,并创建一个字符串来存储显示文本,如下例所示。
int currentValue; string displayText;
创建以下公共属性声明。
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
属性的当前值,但不能直接设置该值。将以下代码放入控件的
Load
事件中。private void Counter_Load(object sender, EventArgs e) { currentValue = 0; label1.Text = Message + Value; }
在 Load 事件中设置标签文本可使目标属性在应用其值之前加载。 在构造函数中设置标签文本将导致空标签。
创建以下公共方法以递增计数器。
public void Increment() { currentValue++; label1.Text = displayText + Value; Incremented(this, EventArgs.Empty); }
将
Incremented
事件的声明添加到控件类中。public event EventHandler Incremented;
调用方可以向该事件添加处理程序,以响应计数器值的更改。
返回到设计视图,然后双击重置按钮以生成
btnReset_Click
事件处理程序。 然后,如下例所示填写。private void btnReset_Click(object sender, EventArgs e) { currentValue = 0; label1.Text = displayText + Value; }
在类定义正上方的
ProvideToolboxControl
特性声明中,将第一个参数的值从"MyWinFormsControl.Counter"
改为"General"
。 这会设置将在“工具箱” 中托管控件的项组名称。以下示例演示了
ProvideToolboxControl
特性和调整后的类定义。[ProvideToolboxControl("General", false)] public partial class Counter : UserControl
测试控件
若要测试工具箱控件,请先在开发环境中测试它,然后在已编译的应用程序中进行测试。
测试控件
按 F5 开始调试。
此命令将生成项目,并打开已安装此控件的 Visual Studio 的第二个实验实例。
在 Visual Studio 的实验实例中,创建一个 Windows 窗体应用程序项目。
在解决方案资源管理器中,双击 Form1.cs,以在设计器中打开它(如果尚未打开)。
在工具箱中,
Counter
控件应显示在常规部分中。将
Counter
控件拖到窗体,然后选择它。Value
、Message
和ShowReset
属性将与从 UserControl 继承的属性一起显示在属性窗口中。将
Message
属性设置为Count:
。将 Button 控件拖到窗体,然后将按钮的名称和文本属性设置为
Test
。双击按钮,以在代码视图中打开 Form1.cs,并创建单击处理程序。
在单击处理程序中,调用
counter1.Increment()
。在构造函数中,在调用
InitializeComponent
之后,键入counter1``.``Incremented +=
,然后按 Tab 两次。Visual Studio 为
counter1.Incremented
事件生成窗体级处理程序。突出显示事件处理程序中的
Throw
语句,键入mbox
,然后按 Tab 两次,从 mbox 代码段生成消息框。在下一行中,添加以下
if
/else
块,以设置重置按钮的可见性。if (counter1.Value < 5) counter1.ShowReset = false; else counter1.ShowReset = true;
按 F5 。
窗体会打开。
Counter
控件显示以下文本。Count: 0
选择“测试”。
计数器递增,Visual Studio 会显示一个消息框。
关闭消息框。
重置按钮消失。
选择测试,直到计数器每次达到 5 关闭消息框。
重置按钮再次出现。
选择“重置”。
计数器重置为 0。
后续步骤
生成“工具箱”控件时,Visual Studio 将在项目的 \bin\debug\ 文件夹中创建一个名为 ProjectName.vsix 的文件。 可以通过将 .vsix 文件上传到网络或网站来部署此控件。 在用户打开 .vsix 文件时,此控件会安装,并添加到用户计算机上的 Visual Studio 工具箱。 或者,可以将 .vsix 文件上传到 Visual Studio Marketplace,以便用户可以浏览工具>扩展和更新对话框找到它。