上面的方法的功能是:
1、建立一个新按钮。
2、把它添加到内部列表和HostForm引用的窗体的控件集合。
3、设置初始属性,包括设置Tag属性来索引该按钮。你可以在这一段中添加代码为控件设置更多的属性。
4、返回新按钮,这样它就能立即被修改并指定给其它的对象引用。
你必须建立一个构造函数(组件被初始化时运行的方法),当控件数组类的一个新实例被建立时,它用来设置HostForm字段的值并把新按钮添加到窗体。可以使用下面的方式达到这个目的。
建立构造函数
为类建立构造函数。
'' Visual BasicPublic Sub New(ByVal host as System.Windows.Forms.Form) HostForm = host Me.AddNewButton()End Sub// C# // 使用下面的构造函数代替默认的构造函数public ButtonArray(System.Windows.Forms.Form host){ HostForm = host; this.AddNewButton();} |
构造函数需要一个参数,即放置按钮数组的窗体。它把该值指定给HostForm字段,接着类的AddNewButton方法给窗体添加一个新按钮。
暴露控件数组
现在已经建立了建立和跟踪数组中控件的途径,但是还必须把它们暴露给开发者。可以通过属性实现这个功能。我们将建立一个默认属性(Visual Basic)或索引器(C#)基于特定按钮的索引返回它的引用。这样你就能编程使用典型控件数组中的MyButtonArray(myIndex)语法了。
建立默认属性
给组件添加下面的代码:
'' Visual BasicDefault Public ReadOnly Property Item(ByVal Index As Integer) As _ System.Windows.Forms.Button Get Return CType(Me.List.Item(Index), System.Windows.Forms.Button) End GetEnd Property// C#public System.Windows.Forms.Button this [int Index]{get { return (System.Windows.Forms.Button) this.List[Index]; }} |
实现Remove方法
现在已经建立了暴露数组中按钮的属性,可以建立从数组中删除按钮的机制了。为了从数组中删除一个按钮,必须从集合的内部List对象和窗体的Controls集合中删除它。
给组件添加下面的方法:
'' Visual BasicPublic Sub Remove() '' 检查以确保有按钮可以删除 If Me.Count > 0 Then '' 从主窗体上的控件集合的数组按钮数组中删除最后一个 '' 注意在访问数组时使用了默认属性 HostForm.Controls.Remove(Me(Me.Count -1)) Me.List.RemoveAt(Me.Count -1) End IfEnd Sub// C#public void Remove(){ //检查以确保有按钮可以删除 if (this.Count > 0) { '' 从主窗体上的控件集合的数组按钮数组中删除最后一个 '' 注意在访问数组时使用了默认属性 HostForm.Controls.Remove(this[this.Count -1]); this.List.RemoveAt(this.Count -1); }} |
建立公用事件处理程序
最后一步是为控件数组建立事件处理程序来处理公用的事件。在演示中,将为按钮的点击事件建立一个方法,接着添加代码把该事件与事件处理程序关联。
建立公用事件处理程序
给组件添加下面的方法:
'' Visual BasicPublic Sub ClickHandler(ByVal sender As Object, ByVal e As _ System.EventArgs) MessageBox.Show("you have clicked button " & CType(CType(sender, _ System.Windows.Forms.Button).Tag, String))End Sub// C#public void ClickHandler(Object sender, System.EventArgs e){ System.Windows.Forms.MessageBox.Show("You have clicked button " + ((System.Windows.Forms.Button) sender).Tag.ToString());} |
该方法通过检索存储在按钮的Tag属性的索引,显示一个消息框表明哪个按钮被