Visual Studio 扩展性工具(VSSDK)中包含的 Windows 窗体工具箱控件项模板可用于创建 工具箱 控件,该控件在安装扩展时自动添加。 本演练演示如何使用模板创建可分发给其他用户的简单计数器控件。
创建工具箱控件
Windows 窗体工具箱控件模板创建一个未定义的用户控件,并提供将控件添加到 工具箱所需的所有功能。
使用 Windows 窗体工具箱控件创建扩展
创建名为
MyWinFormsControl
的 VSIX 项目。 可以通过搜索“vsix”,在 新建项目 对话框中找到 VSIX 项目模板。在项目打开时,添加名为
Counter
的“Windows 窗体工具箱控件”项模板。 在 解决方案资源管理器中,右键单击项目节点,然后选择“添加>新项。 在“添加新项”对话框中,转到“Visual C#”>“扩展性”,并选择“Windows 窗体工具箱控件”这会添加用户控件,将控件放置在 工具箱的
ProvideToolboxControlAttribute
RegistrationAttribute 位置,并在 VSIX 清单中添加一个用于部署的 Microsoft.VisualStudio.ToolboxControl Asset 条目。
为控件生成用户界面
Counter
控件需要两个子控件:Label 显示当前计数,Button 将计数重置为 0。 不需要其他子控件,因为调用方将以编程方式递增计数器。
构建用户界面
在 解决方案资源管理器中,双击 Counter.cs 以在设计器中打开它。
删除“单击此处!”按钮,在你添加“Windows 窗体工具箱控件”项模板时会默认包含此按钮。
从 工具箱中,拖动
Label
控件,然后将其下方的Button
控件拖到设计图面。将整体用户控件的大小调整为 150、50 像素,并将按钮控件的大小调整为 50、20 像素。
在 属性 窗口中,为设计图面上的控件设置以下值。
控件 财产 价值 Label1
文本 "" Button1
名称 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
控件显示以下文本。计数:0
选择“测试”。
计数器递增,Visual Studio 会显示一个消息框。
关闭消息框。
“重置”按钮会消失。
选择“测试”,直到计数器达到 5,每次都关闭消息框。
“重置”按钮会再次出现。
选择 重置。
计数器重置为 0。
后续步骤
当您构建 工具箱 控件时,Visual Studio 会在项目的 \bin\debug\ 文件夹中创建名为 ProjectName.vsix 的文件。 可以通过将 .vsix 文件上传到网络或网站来部署控件。 当用户打开 .vsix 文件时,控件将安装并添加到用户计算机上的 Visual Studio 工具箱。 或者,可以将 .vsix 文件上传到 Visual Studio Marketplace,以便用户可以在 工具>扩展和更新 对话框中浏览找到该文件。