遍历控件
一般用户可以忽略本节的内容。
遍历控件
所有的控件都是派生自WinForm.Control类型,所以这个类型的变量可以引用任何类型的控件,例如:
Dim
c1 As Winform.Control如果要遍历窗口中的所有控件,只能使用WinForm.Control类型的变量,例如:
For
Each c As Winform.Control In e.Form.Controls关于派生
前面提到所有控件都是派生自WinForm.Control类型,初学者可能不能理解“派生”的意义。
以汽车作为例子:汽车是最基本的类型,它定义了汽车最基本的属性和方法,然后在汽车这个类型的基础上,派生出轿车、火车、救护车、消防车等类型,这些类型定义继承了汽车这个基本类型的所有属性,同时增加了自己独有的属性和方法。
对于窗口中的控件来说,WinForm.Control是最基本的类型,它定义了作为控件最基本的属性和方法,其它所有控件都派生于这个基本类型,在WinForm.Control的基础上增加了自己独有的属性和方法。
我们很少需要直接使用WinForm.Control类型的变量,而是直接使用WinForm.Button这种直接表明控件类型的变量,因为前者无法访问WinForm.Button专有的属性和方法。
示例:
下面的代码在编译的时候,会提示WinForm.Control没有Value属性:
Dim
b As WinForm.Control如果改用WinForm.TextBox类型的变量,则一切正常:
Dim
b As WinForm.TextBox这是因为BackColor属性是WinForm.Control类型定义好的,既可以通过WinForm.Control类型的变量访问,也可以通过WinForm.TextBox类型的变量访问,因为后者继承了前者的全部属性和方法。
而Value属性是WinForm.TextBox类型定义的,所以不能通过WinForm.Control类型的变量访问。
唯一的例外就是需要遍历控件的时候,此时只有使用WinForm.Control类型的遍历变量,才能正常引用各种类型的控件;如果你用WinFom.Button这种代表特定控件类型的变量,如果遇到 其它控件类型,例如WinForm.TextBox的时候,肯定要出错。
判断控件类型
如果我希望清除窗口中所有文本框的内容,显然只能使用遍历才能完成这样的任务。
但是遍历控件的时候,只能使用WinForm.Control类型的变量,但是这样的变量又不能访问文本框的Value属性。
所以只能在遍历控件的时候判断控件类型,然后用具体的控件类型变量来引用控件:
For
Each c As WinForm.Control In e.Form.Controls判断变量是否是某类型的语法是:
Typeof 变量 Is 类型
如果变量是指定的类型则返回True,否则返回False。
本节介绍的派生原理,不仅适合窗口设计,也适合今后要介绍的菜单设计。