国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在 Visual Basic .NET創建控件數組

2024-07-10 13:04:03
字體:
來源:轉載
供稿:網友
在 visual basic .net創建控件數組

簡介
數組為使用共享公共功能的控件組提供了一種方便的方式。例如,控件組可以用來顯示相關數據,或者在單擊時提供相關的操作。visual basic .net本身并不支持創建控件數組,但您可以通過編程來復制控件數組的全部功能。本文將指導您創建一個復制控件數組功能的簡單組件。

控件數組的某些用處如下所示:

通過索引訪問具有相同名稱的控件集合,您可以按編號檢索和設置屬性,并遍歷數組中的所有控件。這一操作的典型語法如下:
' visual basic 偽代碼
mycontrol(myindex).myproperty = myvalue
mycontrol(myindex + 1).mymethod

使用單個事件處理程序處理多個控件的事件,檢索并使用這些事件中的索引,如下例所示:
' visual basic 偽代碼
private sub mycontrol_click(sender as object, e as eventargs)
   messagebox.show("您已單擊 mycontrol 編號" & _
      mycontrol.index)
end sub

在運行時動態添加或刪除控件,如下所示:
' visual basic 偽代碼
dim i as integer
for i = 1 to 5
   ' 插入代碼以創建控件并為屬性分配值。
next i

visual basic .net允許您復制部分此類功能,例如,使用代理將多個控件中的事件綁定到單個事件處理程序。但是,如果將該功能并入單個動態的、易于管理的組件,可能會更方便。本文中,我們將創建使用以下內容的組件:

索引和排序控件的集合。按鈕集合將用于演示。
處理來自派生按鈕的單擊事件的事件處理程序。
允許通過索引引用控件及其成員的代碼。
在窗體中動態添加和刪除控件的代碼。
前提
熟悉組件及其工作原理。
對多態有所了解。有關詳細信息,請參閱 polymorphism in components(英文)。
了解 visual basic .net語法。
創建項目
本節中,我們將創建和命名項目,并在項目中添加一個類。該類將封裝實現控件數組的代碼。

創建 buttonarrayproject 和 buttonarray 組件

在 file(文件)菜單上,指向 new(新建),然后選擇 project(項目)以打開 new project(新建項目)對話框。
從 visual basic項目列表中選擇 windows application(windows 應用程序)項目模板,并在 name(名稱)框中鍵入 buttonarrayproject。
從 file(文件)菜單中,選擇 save all(全部保存)以保存項目。
實現集合
buttonarray 類將通過實現集合來完成支持和組織控件數組的任務。集合是一個對象,它包含經過索引的對象變量的列表,以及在集合中添加、刪除或者操作對象的方法。本節中,我們將創建繼承自 system.collections.collectionbase(.net 框架中的類,提供集合所需的很多功能)的類,并實現提供所需功能的方法。

創建繼承的類

從 project(項目)菜單中,選擇 add class(添加類)。
相應地將類命名為 buttonarray.vb 或 buttonarray.cs。
將打開包含該類的 code editor(代碼編輯器)。

在類聲明中,指定此類是從 .net 框架的 system.collections.collectionbase 類繼承而來的。
' visual basic
public class buttonarray
   inherits system.collections.collectionbase
end class

system.collections.collectionbase 類提供集合所需的許多功能。其中包括 list 對象(跟蹤集合所包含的對象)、count 屬性(維護當前集合中的對象總數)和 removeat 方法(按特定索引刪除對象)。在實現控件數組集合時,要用到這些功能。

由于所有控件數組組件都要與一個窗體相關聯,因此需要添加一個字段以保留對該窗體的引用。通過創建專用的只讀字段來保留該引用,可以確保每個控件數組組件只與一個窗體相關聯。

在組件中添加專用的只讀字段

直接在類聲明中添加以下行:
' visual basic
private readonly hostform as system.windows.forms.form

必須在集合中實現的第一個方法是 addnewbutton。此方法將創建新的按鈕控件,并將其添加到所需的窗體中。還需要使用此方法設置新按鈕的初始屬性。

實現 addnewbutton 方法

在包含 buttonarray 類的 code editor(代碼編輯器)中,鍵入以下代碼:
public sub addnewbutton()
   ' 創建 button 類的新實例。
   dim abutton as new system.windows.forms.button()
   ' 將按鈕添加到集合的內部列表。
   me.list.add(abutton)
   ' 將按鈕添加到由 hostform 字段
   ' 引用的窗體的控件集合中。
   hostform.controls.add(abutton)
   ' 設置按鈕對象的初始屬性。
   abutton.top = count * 25
   abutton.left = 100
   abutton.tag = me.count
   abutton.text = "按鈕 " & me.count.tostring
end sub

此方法將:
創建新按鈕。
將新按鈕添加到內部列表和由 hostform 引用的窗體的控件集合中。
設置初始屬性,包括將 tag 屬性設置為按鈕的索引。您可以在本節中添加代碼以設置控件的其他屬性。
還必須創建一個構造函數(對組件進行實例化時運行的方法),用于設置 hostform 字段的值,并且只要創建控件數組類的新實例,便可自動在窗體中添加新按鈕。您可以通過以下方式完成此任務。

創建構造函數

創建類的構造函數。
' visual basic
public sub new(byval host as system.windows.forms.form)
   hostform = host
   me.addnewbutton()
end sub

構造函數需要一個參數,即放置按鈕數組的窗體。它指定提供給 hostform 字段的值,然后調用類的 addnewbutton 方法在窗體中添加新按鈕。

公開控件數組
您已經創建了一種方法在數組中創建和跟蹤控件,現在需要向其他開發人員公開這些控件。可以使用一個屬性來執行此操作。您將創建一個默認屬性 (visual basic) 或索引程序 (c#),根據索引返回一個對特定按鈕的引用。這也使您能夠通過編程方式使用控件數組的典型 mybuttonarray(myindex) 語法。

創建默認屬性

在組件中添加以下代碼。
' visual basic
default 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 get
end property

實現 remove 方法
您已經創建了公開數組中的按鈕所需的屬性,現在可以實現從數組中刪除按鈕的機制。要從數組中刪除按鈕,必須從集合的內部 list 對象和窗體的 controls 集合中將其刪除。

實現 remove 方法

在組件中添加以下方法。
' visual basic
public sub remove()
   ' 檢查以確保存在要刪除的按鈕。
   if me.count > 0 then
      ' 從宿主窗體控件集合中刪除添加到數組
      ' 的最后一個按鈕。請注意在訪問數組時
      ' 默認屬性的使用。
      hostform.controls.remove(me(me.count -1))
      me.list.removeat(me.count -1)
   end if
end sub

創建公共事件處理程序
最后一步是創建事件處理程序以處理數組的公共事件。本例中,我們將創建一種方法來處理按鈕的單擊事件,然后添加代碼以將事件與事件處理程序相關聯。

創建公共事件處理程序

在組件中添加以下方法。
' visual basic
public sub clickhandler(byval sender as object, byval e as _
   system.eventargs)
   messagebox.show("您已單擊按鈕 " & ctype(ctype(sender, _
      button).tag, string))
end sub

此方法顯示一個消息框,通過檢索存儲在按鈕的 tag 屬性中的索引來指示單擊了什么按鈕。注意,此方法的簽名與它將要處理的事件的簽名相同,這是事件處理程序所要求的。

您還需要將事件與事件處理程序相關聯。

將事件與事件處理程序相關聯

在 addnewbutton 方法中添加以下代碼。
' visual basic
addhandler abutton.click, addressof clickhandler

測試項目
完成項目之后,您需要創建一個應用程序來測試組件的功能。

創建測試應用程序

在 solution explorer(解決方案資源管理器)中,右擊 form1 并從快捷菜單中選擇 view designer(視圖設計器)。
將打開包含 form1 的設計器。

從工具箱中,將兩個按鈕添加到窗體中。
將這些按鈕重新定位到窗體的右側。
按以下所示設置按鈕的屬性。按鈕 名稱 文本
button1 btnadd 添加按鈕
button2 btnremove 刪除按鈕

在 solution explorer(解決方案資源管理器)中,右擊 form1 并從快捷菜單中選擇 view code(查看代碼)。
將打開包含 form1 的 code editor(代碼編輯器)。

在 form1 的類聲明中,聲明控件數組對象。
' visual basic
' 聲明新的 buttonarray 對象。
dim mycontrolarray as buttonarray

在窗體的構造函數中,在方法末尾前面添加以下代碼:
' visual basic
mycontrolarray = new buttonarray(me)

// c#
mycontrolarray = new buttonarray(this);
此語句將創建一個新的 buttonarray 對象。參數(me 或 this)將引用創建新 buttonarray 的窗體,并將成為放置按鈕數組的窗體。

在 solution explorer(解決方案資源管理器)中,右擊 form1 并從快捷菜單中選擇 view designer(視圖設計器)。
在設計器中,雙擊 btnadd 以打開包含 btnadd_click 事件的 code editor(代碼編輯器)。
在 btnadd_click 方法中,添加代碼以調用 mycontrolarray 的 addnewbutton 方法:
' visual basic
' 調用 mycontrolarray 的 addnewbutton 方法。
mycontrolarray.addnewbutton()
' 更改按鈕 0 的 backcolor 屬性。
mycontrolarray(0).backcolor = system.drawing.color.red

在 solution explorer(解決方案資源管理器)中,右擊 form1 并從快捷菜單中選擇 view designer(視圖設計器)。
在設計器中,雙擊 btnremove 以打開包含 btnremove_click 事件的 code editor(代碼編輯器)。
在 btnremove_click 方法中,添加以下代碼:
' visual basic
' 調用 mycontrolarray 的 remove 方法。
mycontrolarray.remove()

保存項目。
測試項目

從 debug(調試)菜單中,選擇 start(開始)。
將打開 form1,其中包含三個按鈕,分別標為 add button(添加按鈕)、remove button(刪除按鈕)和 button 1(按鈕 1)。

單擊 button 1(按鈕 1)。
注意,屏幕將顯示一個消息框,其中正確顯示了索引。

單擊幾次 add button(添加按鈕)按鈕。
每單擊一次都會向窗體添加一個新按鈕。單擊每個新按鈕都將顯示一個消息框,正確報告該按鈕的索引。另外請注意,button 0(按鈕 0)的顏色已變為紅色,這是由于 btnadd_click 事件中的以下行所導致的:

mycontrolarray(0).backcolor = system.drawing.color.red
單擊幾次 remove button(刪除按鈕)按鈕。
每單擊一次都會從窗體中刪除一個按鈕。

單擊此按鈕,直至刪除窗體左側的所有按鈕。
再次單擊 add button(添加按鈕)按鈕。
按鈕將再次被添加到窗體中,并用正確的索引進行編號。

總結
本文演示了如何創建封裝控件數組功能的組件。其中包括如何創建方法以動態地在窗體中添加和刪除控件,以及通過默認的屬性或索引程序來公開對象。因為實現了所有功能,所以可以通過編寫組件的自定義代碼來擴展控件數組。

商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹阳市| 家居| 郴州市| 洞口县| 巫山县| 中卫市| 孝昌县| 永和县| 特克斯县| 明溪县| 苍山县| 霍城县| 镇江市| 靖州| 西华县| 揭东县| 肥东县| 山阴县| 桃园市| 临邑县| 泸定县| 龙江县| 夹江县| 宣化县| 顺昌县| 原阳县| 曲水县| 航空| 龙泉市| 平和县| 烟台市| 定远县| 台南市| 印江| 丰宁| 营口市| 余江县| 张家口市| 册亨县| 香港| 页游|