
图6. funkybutton
当前选择的属性页就是属性窗口从被选择的控件的属性中得到的。属性页因此就允许来操纵显示属性的不同集合。events页就是像属性一样以某种方式来处理事件。在这个例子中,属性页就创建了表示控件顶点的属性。
.net framework中的属性用propertydescriptor类来封装。propertydescriptor本身是一个抽象类,framework中由他派生的类提供了访问组件的开放属性的方法。不过,属性窗口是直接作用在propertydescriptor上,而不是直接作用在属性上。因此,我们就可以写自己的propertydescriptor来做一些特殊的工作。在这个例子里,我们就有一个属性表示控件的顶点数,另一个就表示每一个顶点。再次注意一下,我们在属性窗口上增加页并不相应的作用在其他对象上。
当属性窗口向propertytab询问properties的时候,它就调用getproperties方法。对于我们的示例程序,这个方法就像下面的一样: