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

首頁 > 編程 > .NET > 正文

在 Visual Basic .NET 和 Visual C# .NET 中創建控件數組

2024-07-10 13:04:04
字體:
來源:轉載
供稿:網友

在 visual basic .net 和 visual c# .net 中創建控件數組
matthew a. stoecker
visual studio team
microsoft corporation
2002 年 1 月

摘要:本文介紹如何使用 visual basic® .net 和 visual c#™ .net 創建和管理控件數組。

目錄

  • 簡介
  • 前提
  • 創建項目
  • 實現集合
  • 公開控件數組
  • 創建公共事件處理程序
  • 測試項目
  • 總結

簡介


數組為使用共享公共功能的控件組提供了一種方便的方式。例如,控件組可以用來顯示相關數據,或者在單擊時提供相關的操作。visual basic .net 和 c# 本身并不支持創建控件數組,但您可以通過編程來復制控件數組的全部功能。本文將指導您創建一個復制控件數組功能的簡單組件。
控件數組的某些用處如下所示:
  • 通過索引訪問具有相同名稱的控件集合,您可以按編號檢索和設置屬性,并遍歷數組中的所有控件。這一操作的典型語法如下:
    ' visual basic 偽代碼mycontrol(myindex).myproperty = myvaluemycontrol(myindex + 1).mymethod// c# 偽代碼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// c# 偽代碼private void mycontrol_click(system.object sender, system.eventargs e)   {      messagebox.show("您已單擊 mycontrol 編號" +         mycontrol.index);   }
  • 在運行時動態添加或刪除控件,如下所示:
    ' visual basic 偽代碼dim i as integerfor i = 1 to 5   ' 插入代碼以創建控件并為屬性分配值。next i// c# 偽代碼for (int i = 1; i < 6; i++){   // 插入代碼以創建控件并為屬性分配值。 }

visual basic .net 和 c# 允許您復制部分此類功能,例如,使用代理將多個控件中的事件綁定到單個事件處理程序。但是,如果將該功能并入單個動態的、易于管理的組件,可能會更方便。本文中,我們將創建使用以下內容的組件:
  • 索引和排序控件的集合。按鈕集合將用于演示。
  • 處理來自派生按鈕的單擊事件的事件處理程序。
  • 允許通過索引引用控件及其成員的代碼。
  • 在窗體中動態添加和刪除控件的代碼。

前提

  • 熟悉組件及其工作原理。
  • 對多態有所了解。有關詳細信息,請參閱 polymorphism in components(英文)。
  • 了解 visual basic .net 或 c# .net 語法。

創建項目


本節中,我們將創建和命名項目,并在項目中添加一個類。該類將封裝實現控件數組的代碼。
創建 buttonarrayproject 和 buttonarray 組件
  1. file(文件)菜單上,指向 new(新建),然后選擇 project(項目)以打開 new project(新建項目)對話框。
  2. 從 visual basic 或 visual c# 項目列表中選擇 windows application(windows 應用程序)項目模板,并在 name(名稱)框中鍵入 buttonarrayproject
  3. file(文件)菜單中,選擇 save all(全部保存)以保存項目。

實現集合


buttonarray 類將通過實現集合來完成支持和組織控件數組的任務。集合是一個對象,它包含經過索引的對象變量的列表,以及在集合中添加、刪除或者操作對象的方法。本節中,我們將創建繼承自 system.collections.collectionbase(.net 框架中的類,提供集合所需的很多功能)的類,并實現提供所需功能的方法。
創建繼承的類
  1. project(項目)菜單中,選擇 add class(添加類)。
  2. 相應地將類命名為 buttonarray.vb buttonarray.cs
    將打開包含該類的 code editor(代碼編輯器)。
  3. 在類聲明中,指定此類是從 .net 框架的 system.collections.collectionbase 類繼承而來的。
    ' visual basicpublic class buttonarray   inherits system.collections.collectionbaseend class// c#public class buttonarray : system.collections.collectionbase{   // 省略了由設計器添加的代碼。}

system.collections.collectionbase 類提供集合所需的許多功能。其中包括 list 對象(跟蹤集合所包含的對象)、count 屬性(維護當前集合中的對象總數)和 removeat 方法(按特定索引刪除對象)。在實現控件數組集合時,要用到這些功能。
由于所有控件數組組件都要與一個窗體相關聯,因此需要添加一個字段以保留對該窗體的引用。通過創建專用的只讀字段來保留該引用,可以確保每個控件數組組件只與一個窗體相關聯。
在組件中添加專用的只讀字段
  • 直接在類聲明中添加以下行:
    ' visual basicprivate readonly hostform as system.windows.forms.form// c#private readonly system.windows.forms.form hostform;

必須在集合中實現的第一個方法是 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.tostringend sub// c# public void addnewbutton(){   // 創建 button 類的新實例。   system.windows.forms.button abutton = new       system.windows.forms.button();   // 將按鈕添加到集合的內部列表。   this.list.add(abutton);   // 將按鈕添加到由 hostform 字段    // 引用的窗體的控件集合中。   hostform.controls.add(abutton);   // 設置按鈕對象的初始屬性。   abutton.top = count * 25;   abutton.left = 100;   abutton.tag = this.count;   abutton.text = "按鈕 " + this.count.tostring();}

此方法將:
  1. 創建新按鈕。
  2. 將新按鈕添加到內部列表和由 hostform 引用的窗體的控件集合中。
  3. 設置初始屬性,包括將 tag 屬性設置為按鈕的索引。您可以在本節中添加代碼以設置控件的其他屬性。

還必須創建一個構造函數(對組件進行實例化時運行的方法),用于設置 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 集合中將其刪除。
實現 remove 方法
  • 在組件中添加以下方法。
    ' 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("您已單擊按鈕 " & ctype(ctype(sender, _      button).tag, string))end sub// c#public void clickhandler(object sender, system.eventargs e){   system.windows.forms.messagebox.show("您已單擊按鈕 " +       (string)((system.windows.forms.button) sender).tag);}

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

您還需要將事件與事件處理程序相關聯。
將事件與事件處理程序相關聯
  • 在 addnewbutton 方法中添加以下代碼。
    ' visual basicaddhandler abutton.click, addressof clickhandler// c#abutton.click += new system.eventhandler(clickhandler);

測試項目


完成項目之后,您需要創建一個應用程序來測試組件的功能。
創建測試應用程序
  1. 在 solution explorer(解決方案資源管理器)中,右擊 form1 并從快捷菜單中選擇 view designer(視圖設計器)。
    將打開包含 form1 的設計器。
  2. 從工具箱中,將兩個按鈕添加到窗體中。
  3. 將這些按鈕重新定位到窗體的右側。
  4. 按以下所示設置按鈕的屬性。 按鈕名稱文本button1btnadd添加按鈕button2btnremove刪除按鈕
  5. 在 solution explorer(解決方案資源管理器)中,右擊 form1 并從快捷菜單中選擇 view code(查看代碼)。
    將打開包含 form1 的 code editor(代碼編輯器)。
  6. 在 form1 的類聲明中,聲明控件數組對象。
    ' visual basic' 聲明新的 buttonarray 對象。dim mycontrolarray as buttonarray// c#// 聲明新的 buttonarray 對象。buttonarray mycontrolarray;
  7. 在窗體的構造函數中,在方法末尾前面添加以下代碼:
    ' visual basicmycontrolarray = new buttonarray(me)// c#mycontrolarray = new buttonarray(this);

    此語句將創建一個新的 buttonarray 對象。參數(methis)將引用創建新 buttonarray 的窗體,并將成為放置按鈕數組的窗體。
  8. 在 solution explorer(解決方案資源管理器)中,右擊 form1 并從快捷菜單中選擇 view designer(視圖設計器)。
  9. 在設計器中,雙擊 btnadd 以打開包含 btnadd_click 事件的 code editor(代碼編輯器)。
  10. btnadd_click 方法中,添加代碼以調用 mycontrolarray 的 addnewbutton 方法:
    ' visual basic' 調用 mycontrolarray 的 addnewbutton 方法。mycontrolarray.addnewbutton()' 更改按鈕 0 的 backcolor 屬性。mycontrolarray(0).backcolor = system.drawing.color.red// c#// 調用 mycontrolarray 的 addnewbutton 方法。mycontrolarray.addnewbutton();// 更改按鈕 0 的 backcolor 屬性。mycontrolarray[0].backcolor = system.drawing.color.red;
  11. 在 solution explorer(解決方案資源管理器)中,右擊 form1 并從快捷菜單中選擇 view designer(視圖設計器)。
  12. 在設計器中,雙擊 btnremove 以打開包含 btnremove_click 事件的 code editor(代碼編輯器)。
  13. btnremove_click 方法中,添加以下代碼:
    ' visual basic' 調用 mycontrolarray 的 remove 方法。mycontrolarray.remove()// c#// 調用 mycontrolarray 的 remove 方法。mycontrolarray.remove();
  14. 保存項目。

測試項目
  1. debug(調試)菜單中,選擇 start(開始)。
    將打開 form1,其中包含三個按鈕,分別標為 add button(添加按鈕)、remove button(刪除按鈕)和 button 1(按鈕 1)。
  2. 單擊 button 1(按鈕 1)。
    注意,屏幕將顯示一個消息框,其中正確顯示了索引。
  3. 單擊幾次 add button(添加按鈕)按鈕。
    每單擊一次都會向窗體添加一個新按鈕。單擊每個新按鈕都將顯示一個消息框,正確報告該按鈕的索引。另外請注意,button 0(按鈕 0)的顏色已變為紅色,這是由于 btnadd_click 事件中的以下行所導致的:
    mycontrolarray(0).backcolor = system.drawing.color.red
  4. 單擊幾次 remove button(刪除按鈕)按鈕。
    每單擊一次都會從窗體中刪除一個按鈕。
  5. 單擊此按鈕,直至刪除窗體左側的所有按鈕。
  6. 再次單擊 add button(添加按鈕)按鈕。
    按鈕將再次被添加到窗體中,并用正確的索引進行編號。

總結


本文演示了如何創建封裝控件數組功能的組件。其中包括如何創建方法以動態地在窗體中添加和刪除控件,以及通過默認的屬性或索引程序來公開對象。因為實現了所有功能,所以可以通過編寫組件的自定義代碼來擴展控件數組。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汕头市| 舒城县| 定日县| 聂拉木县| 兰考县| 舞阳县| 乌审旗| 英山县| 黄大仙区| 土默特右旗| 营口市| 新泰市| 陆丰市| 凤庆县| 青河县| 阜宁县| 拉孜县| 郸城县| 辛集市| 临夏县| 甘洛县| 即墨市| 水富县| 长宁区| 马龙县| 濮阳县| 仁怀市| 平凉市| 吉水县| 洱源县| 尖扎县| 乌什县| 巴林右旗| 沧州市| 平原县| 麻阳| 岳阳县| 峨边| 教育| 鄢陵县| 五华县|