在vb.net中創(chuàng)建使用控件數(shù)組
首先創(chuàng)建一個(gè)button類型控件數(shù)組:
1、創(chuàng)建“windows應(yīng)用程序”類型的工程,添加名為buttonarray的類,并使該類繼承 system.collection.collectionbase 類。system.collections.collectionbase類是.net框架類庫中為集合操作提供抽象的基類,通過對(duì)它的繼承可以為我們的buttonarray類具備集合增加、刪除、索引的功能。
2、為buttonarray類添加parentform屬性,即控件組所在窗體,創(chuàng)建初始化函數(shù)(構(gòu)造函數(shù));
3、為控件數(shù)組類增加additem方法,該方法在控件數(shù)組類中添加成員;
4、為控件數(shù)組類增加removeitem方法,該方法在控件數(shù)組中刪除一個(gè)成員。
示例代碼:
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)
'在這里編寫控件數(shù)組對(duì)點(diǎn)擊事件的響應(yīng)
'例如:
msgbox("點(diǎn)擊:" & sender.gettype().tostring & ctype(ctype(sender, button).tag, string))
end sub
end class
使用創(chuàng)建的控件數(shù)組
在form1中放置兩個(gè)按鈕button1、button2,分別測(cè)試控件數(shù)組的增添、刪除。
雙擊form添加代碼:
public class form1
inherits system.windows.forms.form
……windows窗體設(shè)計(jì)器生成的代碼……
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
其他的控件數(shù)組也可以用類似的方式來實(shí)現(xiàn)
例如 label控件數(shù)組
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)
'在這里編寫控件數(shù)組對(duì)點(diǎn)擊事件的響應(yīng)
'例如:
msgbox("點(diǎn)擊:" & sender.gettype().tostring & ctype(ctype(sender, label).tag, string))
end sub
end class
使用創(chuàng)建的label控件
在form1中放置兩個(gè)按鈕label1、label2
雙擊form添加代碼:
public class form1
inherits system.windows.forms.form
#region " windows 窗體設(shè)計(jì)器生成的代碼 "
public sub new()
mybase.new()
'該調(diào)用是 windows 窗體設(shè)計(jì)器所必需的。
initializecomponent()
'在 initializecomponent() 調(diào)用之后添加任何初始化
'用來綁定label
bindarray()
end sub
……windows窗體設(shè)計(jì)器生成的其他代碼……
#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
然后可以測(cè)試點(diǎn)擊兩個(gè)label可以顯示相應(yīng)的tag的信息。
新聞熱點(diǎn)
疑難解答
圖片精選