分类:
2010-08-09 18:44:10
Windows 窗体控件是可以放置到 Windows 窗体应用程序(面向公共语言运行库的 GUI 应用程序)中的组件。使用 Visual C++ 编写的 Windows 窗体应用程序通过新的 Visual C++ 语法使用 .NET Framework 类和其他 .NET 功能。
在本过程中,您将创建一个 Windows 窗体控件,该控件显示在每次单击应用程序中的标签时都递增的一个数字。您还将创建一个 Windows 窗体应用程序项目来测试该控件。
本演练涵盖以下内容:
创建新项目
设计控件
向控件添加自定义属性
添加用于测试控件的项目
将控件放在应用程序中
运行应用程序
在本节中,您将使用“Windows 窗体控件”项目模板创建一个用户控件,它是一个包含其他控件的复合控件。
您也可以通过直接从 类(其中的代码负责绘制控件)或者 类(无 UI 的控件)派生一个类来创建 Windows 窗体控件。
在“文件”菜单上,单击“新建”,然后单击“项目”。
在“项目类型”窗格中,选择“Visual C++”节点中的“CLR”,然后在“Visual Studio 已安装的模板”窗格中选择“Windows 窗体控件库”。
键入项目的名称,如“clickcounter”。
为解决方案键入一个不同的名称,如“controlandtestapp”。
您可以接受默认位置、键入一个位置或者浏览到要保存项目的目录。
Windows 窗体设计器将打开并显示一个区域,您可以将要放置到控件设计图面上的控件添加到该区域中。
在本步骤中,您要将一个 控件添加到控件设计图面中。然后,设置控件本身及其包含的 Label 控件的一些属性。
如果“属性”窗口不可见,请单击“视图”菜单上的“属性窗口”。
单击以选择控件,并按照下面的操作设置其属性:
将“Size”属性设置为“100, 100”。
将“BorderStyle”设置为“Fixed3D”。
当控件放置到应用程序中时,将显示标签的边框。
如果“工具箱”窗口不可见,请单击“视图”菜单上的“工具箱”。
将一个 Label 控件从“工具箱”拖动到设计图面上,将其放置到靠近控件中心的位置。
设置标签的下列属性:
将“BorderStyle”设置为“FixedSingle”。
将“Text”设置为数字“0”(零)。
将“Autosize”设置为“False”。
将“Size”设置为“30, 20”。
将“TextAlign”设置为“MiddleCenter”。
保留“Name”属性(在代码中将使用它来引用该控件)为“label1”。控件应如下所示:
通过双击标签,为标签的 事件(标签的默认事件)添加事件处理程序。
clickcounter.h 文件将显示在编辑区域中,并自动生成一个空事件处理程序方法。
注意 |
---|
如果需要更多空间,可以关闭“工具箱”或“属性”窗口,方法是单击它们的“关闭”框,或者解除它们的锁定使其自动隐藏。 |
在 label1_Click 方法的左大括号后按 Enter 并键入:
int temp = System::Int32::Parse(label1->Text);
temp++;
label1->Text = temp.ToString();
在键入范围解析运算符 (::)、点运算符 (.) 或箭头运算符 (->) 后,IntelliSense™ 将显示有效选项的列表。您可以通过突出显示某个项并按 Tab 或 Enter,或者通过双击某个项,将该项插入代码中。
此外,当键入方法的左括号时,Visual Studio 将显示该方法的每个重载的有效参数类型。
在本步骤中,您将定义一个自定义属性,它允许应用程序开发人员确定控件上显示的数字是在单击标签时递增还是在单击控件上的任何位置时递增。
将光标放置在 clickcounterControl.h 文件顶部的第一个 public 范围指示符的冒号之后,按 Enter,然后键入以下内容:
property bool ClickAnywhere {
bool get() {
return (label1->Dock == DockStyle::Fill);
}
void set(bool val) {
if (val)
label1->Dock = DockStyle::Fill;
else
label1->Dock = DockStyle::None;
}
}
当控件的 ClickAnywhere 属性设置为 true 时,标签的 属性将设置为 DockStyle::Fill,因此该标签将占据整个控件图面。单击控件图面上的任何位置将引发标签的 Click 事件,使标签上的数字递增。
当 ClickAnywhere 属性为 false(默认值)时,标签的 Dock 属性将设置为 DockStyle::None。标签不填充整个控件,并且单击控件时,必须单击标签边框内部才会引发标签的 Click 事件,使数字递增。
生成用户控件。在“生成”菜单上,选择“生成解决方案”。
如果没有错误,将生成文件名为 clickcounter.dll 的 Windows 窗体控件。您可以在项目目录结构中找到此文件。
在本步骤中,您要创建一个 Windows 窗体应用程序项目,您将在其中的一个窗体上放置“clickcounter”控件的实例。
注意 |
---|
您所创建的用于测试控件的 Windows 窗体应用程序可以使用 Visual C++ 或其他 .NET 语言(如 C# 或 Visual Basic .NET)来编写。 |
在“文件”菜单上,单击“新建”,然后单击“项目”。
也可以通过以下方法将项目添加到解决方案中:右击“解决方案资源管理器”中的“controlandtestapp”,指向“添加”,然后单击“新建项目”。
在“项目类型”窗格中,选择“Visual C++”节点中的“CLR”,然后在“Visual Studio 已安装的模板”窗格中选择“Windows 窗体应用程序”。
键入项目的名称,如“testapp”。
确保选择“添入解决方案”,而不是接受“解决方案”下拉列表中默认的“创建新解决方案”设置,然后单击“确定”。
将为新项目打开 Windows 窗体设计器,其中显示一个名为“Form1”的新窗体。
添加对控件的引用。在“项目”菜单上,单击“引用”;或者右击“解决方案资源管理器”中的“testapp”项目,并单击“引用”。
单击“添加新引用”按钮,然后单击“项目”选项卡(这是在此解决方案中添加对另一个项目的引用),并选择“clickcounter”项目。单击“确定”两次。
如果“工具箱”窗口不可见,请单击“视图”菜单上的“工具箱”。
右击“工具箱”并单击“选择项”。
单击“浏览”按钮,定位到解决方案目录结构中的 clickcounter.dll文件。选择该文件并单击“打开”。
clickcounter 控件即出现在“.NET Framework 组件”列表中,并带有一个选中标记。单击“确定”。
控件即显示在“工具箱”中,带有默认的“齿轮”图标。
在本步骤中,您要将控件的两个实例放到应用程序窗体上并设置其属性。
从“工具箱”拖出“clickcounter”控件的两个实例。将它们放在窗体上,避免使它们重叠。
如果需要加宽窗体,请单击以选择窗体,向外拖动一个选择手柄。
如果“属性”窗口不可见,请单击“视图”菜单上的“属性”。
如果属性是按类别组织的,“ClickAnywhere”属性将位于“属性窗口”的“杂项”部分。
单击以选择窗体上的一个“clickcounter”控件实例,将其“ClickAnywhere”属性设置为 true。
保留“clickcounter”控件的另一个实例的“ClickAnywhere”属性设置为 false(默认值)。
右击“解决方案资源管理器”中的“testapp”项目并选择“设为启动项目”。
在“生成”菜单上,单击“重新生成解决方案”。
您应当看到生成了两个项目,并且没有出现错误。
在本步骤中,您将运行应用程序,并单击控件以测试它们。
在“调试”菜单上,单击“开始调试”。
将显示窗体,其中控件的两个实例都可见。
运行应用程序并单击两个“clickcounter”控件:
单击“ClickAnywhere”设置为 true 的控件。
当单击控件上的任何位置时,标签上的数字都会递增。
单击“ClickAnywhere”设置为 false 的控件。
仅当在标签的可见边框内单击时,标签上的数字才会递增。
单击“Form1”窗口右上角的“关闭”框,关闭测试应用程序。