2 创建复合控件
复合控件提供了一种创建和重用自定义图形界面的方法。复合控件本质上是具有可视化表示形式的组件。因此,它可能包含一个或多个 Windows 窗体控件、组件或代码块,它们能够通过验证用户输入、修改显示属性或执行作者所需的其他任务来扩展功能。可以按照与其他控件相同的方式将复合控件置于 Windows 窗体中。这里创建一个名为“ctlAddressView”的复合控件,用来显示和编辑联系人的信息。
(1)启动Visual Studio 2005,在“文件”菜单上,指向“新建”,然后单击“项目”打开“新建项目”对话框。
(2)从 Visual C# 项目列表中选择“Windows 控件库”项目模板,在“名称”框中键入“AddressView”,然后单击“确定”。
(3)在解决方案资源管理器中,右击“UserControl1.cs”,然后选择“重命名”。将文件名更改为“ctlAddressView.cs”。当系统询问是否要重命名对代码元素“UserControl1”的所有引用时,单击“是”按钮。
(4)在继续设计“ctlAddressView”控件之前,首先创建一个用来编辑电话号码的文本编辑框,该控件可以自动校验用户输入的号码是否正确。在解决方案资源管理器中,右击项目“AddressView”,选择“添加”、“用户控件”,在“添加新项”对话框中选择“用户控件”,名称改为“PhoneEdit”。
(5)在解决方案资源管理器中双击“PhoneEdit.cs”,打开设计器窗口,添加一个“TextBox”控件,重新命名为“textBoxPhone”,将其“Dock”属性改为“Fill”。
(6)由于电话号码是数字的,因此要限制用户的输入,必须输入数字字符,为“textBoxPhone”控件添加“validating”属性,验证是否输入非法字符,添加以下代码: private void textBoxPhone_Validating(object sender, CancelEventArgs e) { foreach(char c in textBoxPhone.Text) { if(!Char.IsDigit(c)) { MessageBox.Show("号码中有非法字符,请重新输入"); Focus(); break; } } }
(7)“PhoneEdit”控件封装了“TextBox”控件,它有一组继承属性,但是注意到在“PhoneEdit”类中,文本框“textBoxPhone”的属性是私有的,后续用户无法访问它的属性。解决这个问题的方法是通过添加代码为控件添加自定义属性并公开,下面为“PhoneEdit”添加文本框显示内容的属性,使用户可以更改和读取文本框的内容: public String strPhoneCode { get { return textBoxPhone.Text; }
|