在vb.net中创建使用控件数组
首先创建一个button类型控件数组:
1、创建“windows应用程序”类型的工程,添加名为buttonarray的类,并使该类继承 system.collection.collectionbase 类。system.collections.collectionbase类是.net框架类库中为集合操作提供抽象的基类,通过对它的继承可以为我们的buttonarray类具备集合增加、删除、索引的功能。
2、为buttonarray类添加parentform属性,即控件组所在窗体,创建初始化函数(构造函数);
3、为控件数组类增加additem方法,该方法在控件数组类中添加成员;
4、为控件数组类增加removeitem方法,该方法在控件数组中删除一个成员。
示例代码:
public class buttonarray
inherits system.collections.collectionbase
private readonly parentform as system.windows.forms.form
public sub new(byval pform as system.windows.forms.form)
parentform = pform
end sub
default public readonly property item(byval index as integer) as system.windows.forms.button
get
return me.list.item(index) ' buttonarray的list 属性从collectionbase 继承
end get
end property
public sub additem()
dim btnitem as new system.windows.forms.button
me.list.add(btnitem)
parentform.controls.add(btnitem) '向窗体中增加控件
btnitem.tag = me.count 'count属性从collectionbase 继承
btnitem.top = me.count * 30
btnitem.left = 200
btnitem.text = "button" & me.count.tostring
addhandler btnitem.click, addressof btnitem_click '绑定事件处理程序
end sub
public sub additem(byval btnitem as system.windows.forms.button)
me.list.add(btnitem)
addhandler btnitem.click, addressof btnitem_click '绑定事件处理程序
end sub
public sub removeitem()
if me.count > 0 then
parentform.controls.remove(me(me.count - 1))
me.list.removeat(me.count - 1)
end if
end sub
public sub btnitem_click(byval sender as object, byval e as system.eventargs)
'在这里编写控件数组对点击事件的响应
'例如:
msgbox("点击:" & sender.gettype().tostring & ctype(ctype(sender, button).tag, string))
end sub
end class
使用创建的控件数组
在form1中放置两个按钮button1、button2,分别测试控件数组的增添、删除。
双击form添加代码:
public class form1
inherits system.windows.forms.form
……windows窗体设计器生成的代码……
dim buttons as new buttonarray(me)
private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click
buttons.additem()
end sub
private sub button2_click(byval sender as system.object, byval e as system.eventargs) handles button2.click
buttons.removeitem()
end sub
end class
其他的控件数组也可以用类似的方式来实现
例如 label控件数组
labelarray.vb代码如下:
public class labelarray
inherits system.collections.collectionbase
private readonly parentform as system.windows.forms.form
public sub new(byval pform as system.windows.forms.form)
parentform = pform
end sub
default public readonly property item(byval index as integer) as system.windows.forms.label
get
return me.list.item(index) ' buttonarray的list 属性从collectionbase 继承
end get
end property
public sub additem(byval btnitem as system.windows.forms.label)
me.list.add(btnitem)
addhandler btnitem.click, addressof btnitem_click '绑定事件处理程序
end sub
public sub btnitem_click(byval sender as object, byval e as system.eventargs)
'在这里编写控件数组对点击事件的响应
'例如:
msgbox("点击:" & sender.gettype().tostring & ctype(ctype(sender, label).tag, string))
end sub
end class
使用创建的label控件
在form1中放置两个按钮label1、label2
双击form添加代码:
public class form1
inherits system.windows.forms.form
#region " windows 窗体设计器生成的代码 "
public sub new()
mybase.new()
'该调用是 windows 窗体设计器所必需的。
initializecomponent()
'在 initializecomponent() 调用之后添加任何初始化
'用来绑定label
bindarray()
end sub
……windows窗体设计器生成的其他代码……
#end region
dim labels as new labelarray(me)
public sub bindarray()
me.label1.tag = "1111"
me.label2.tag = "222"
labels.additem(me.label1)
labels.additem(me.label2)
end sub
end class
然后可以测试点击两个label可以显示相应的tag的信息。
新闻热点
疑难解答
图片精选