程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Visual C# .NET 中創建控件數組

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

編輯:.NET實例教程

-
Visual C# .Net 中創建控件數組
-
摘要:本文介紹如何使用  Visual C#? .Net 創建和管理控件數組。
目錄
簡介
前提
創建項目
實現集合
公開控件數組
創建公共事件處理程序
測試項目
總結
簡介
數組為使用共享公共功能的控件組提供了一種方便的方式。例如,控件組可以用來顯示相關數據,或者在單擊時提供相關的操作。 C# 本身並不支持創建控件數組,但您可以通過編程來復制控件數組的全部功能。本文將指導您創建一個復制控件數組功能的簡單組件。
控件數組的某些用處如下所示:
通過索引訪問具有相同名稱的控件集合,您可以按編號檢索和設置屬性,並遍歷數組中的所有控件。這一操作的典型語法如下:


// C# 偽代碼 
myControl[myIndex].myProperty = myValue; myControl[myIndex + 1].myMethod 
使用單個事件處理程序處理多個控件的事件,檢索並使用這些事件中的索引,如下例所示:


// C# 偽代碼 
private void myControl_Click(System.Object sender, System.EventArgs e) ...{ Messagebox.Show("您已單擊 MyControl 編號" + MyControl.Index); } 
在運行時動態添加或刪除控件,如下所示:


// C# 偽代碼 
for (int i = 1; i < 6; i++) 
...{ 
   // 插入代碼以創建控件並為屬性分配值。 

C# 允許您復制部分此類功能,例如,使用代理將多個控件中的事件綁定到單個事件處理程序。但是,如果將該功能並入單個動態的、易於管理的組件,可能會更方便。本文中,我們將創建使用以下內容的組件:
索引和排序控件的集合。按鈕集合將用於演示。
處理來自派生按鈕的單擊事件的事件處理程序。
允許通過索引引用控件及其成員的代碼。
在窗體中動態添加和刪除控件的代碼。
前提
熟悉組件及其工作原理。
對多態有所了解。有關詳細信息,請參閱 Polymorphism in Components(英文)。
了解 Visual Basic .NET 或 C# .Net 語法。
創建項目
本節中,我們將創建和命名項目,並在項目中添加一個類。該類將封裝實現控件數組的代碼。
創建 ButtonArrayProject 和 ButtonArray 組件
在 File(文件)菜單上,指向 New(新建),然後選擇 Project(項目)以打開 New Project(新建項目)對話框。
從 Visual Basic 或 Visual C# 項目列表中選擇 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 類繼承而來的。


// C# 
public class ButtonArray : System.Collections.CollectionBase 
...{ 
   // 省略了由設計器添加的代碼。 

System.Collections.CollectionBase 類提供集合所需的許多功能。其中包括 List 對象(跟蹤集合所包含的對象)、Count 屬性(維護當前集合中的對象總數)和 RemoveAt 方法(按特定索引刪除對象)。在實現控件數組集合時,要用到這些功能。
由於所有控件數組組件都要與一個窗體相關聯,因此需要添加一個字段以保留對該窗體的引用。通過創建專用的只讀字段來保留該引用,可以確保每個控件數組組件只與一個窗體相關聯。
在組件中添加專用的只讀字段
直接在類聲明中添加以下行:


" Visual Basic 
Private ReadOnly HostForm as System.Windows.Forms.Form 
// C# 
private readonly System.Windows.Forms.Form HostForm; 
必須在集合中實現的第一個方法是 AddNewButton。此方法將創建新的按鈕控件,並將其添加到所需的窗體中。還需要使用此方法設置新按鈕的初始屬性。
實現 AddNewButton 方法
在包含 ButtonArray 類的 Code Editor(代碼編輯器)中,鍵入以下代碼:


Public Sub AddNewButton()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 

 

 



// 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(); 

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



// C# 
// 使用此構造函數替換默認的構造函數。 
public ButtonArray(System.Windows.Forms.Form host) 
...{ 
   HostForm = host; 
   this.AddNewButton(); 

構造函數需要一個參數,即放置按鈕數組的窗體。它指定提供給 HostForm 字段的值,然後調用類的 AddNewButton 方法在窗體中添加新按鈕。
公開控件數組
您已經創建了一種方法在數組中創建和跟蹤控件,現在需要向其他開發人員公開這些控件。可以使用一個屬性來執行此操作。您將創建一個默認屬性索引程序 (C#),根據索引返回一個對特定按鈕的引用。這也使您能夠通過編程方式使用控件數組的典型 MyButtonArray(myIndex) 語法。
創建默認屬性
在組件中添加以下代碼。
-



// C# 
public System.Windows.Forms.Button this [int Index] 
...{ 
get 
...{ 
      return (System.Windows.Forms.Button) this.List[Index]; 
   } 


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



// C# 
public void Remove() 

   // 檢查以確保存在要刪除的按鈕。 
   if (this.Count > 0) 
   ...{ 
      // 從宿主窗體控件集合中刪除添加到數組 
      // 的最後一個按鈕。請注意在訪問數組時 
      // 索引的使用。 
      HostForm.Controls.Remove(this[this.Count -1]); 
      this.List.RemoveAt(this.Count -1); 
   } 


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



// C# 
public void ClickHandler(Object sender, System.EventArgs e) 
...{ 
   System.Windows.Forms.MessageBox.Show("您已單擊按鈕 " + 
      (string)((System.Windows.Forms.Button) sender).Tag); 


此方法顯示一個消息框,通過檢索存儲在按鈕的 Tag 屬性中的索引來指示單擊了什麼按鈕。注意,此方法的簽名與它將要處理的事件的簽名相同,這是事件處理程序所要求的。
您還需要將事件與事件處理程序相關聯。
將事件與事件處理程序相關聯
在 AddNewButton 方法中添加以下代碼。
" Visual Basic
AddHandler aButton.Click, AddressOf ClickHandler



// C# 
aButton.Click += new System.EventHandler(ClickHandler); 


測試項目
完成項目之後,您需要創建一個應用程序來測試組件的功能。
創建測試應用程序
在 Solution Explorer(解決方案資源管理器)中,右擊 Form1 並從快捷菜單中選擇 VIEw Designer(視圖設計器)。
將打開包含 Form1 的設計器。
從工具箱中,將兩個按鈕添加到窗體中。
將這些按鈕重新定位到窗體的右側。
按以下所示設置按鈕的屬性。 按鈕 名稱 文本
Button1 btnAdd 添加按鈕
Button2 btnRemove 刪除按鈕
>在 Solution Explorer(解決方案資源管理器)中,右擊 Form1 並從快捷菜單中選擇 VIEw Code(查看代碼)。
將打開包含 Form1 的 Code Editor(代碼編輯器)。
在 Form1 的類聲明中,聲明控件數組對象。
// C#
// 聲明新的 ButtonArray 對象。
ButtonArray MyControlArray;
在窗體的構造函數中,在方法末尾前面添加以下代碼:
-
// C#
MyControlArray = new ButtonArray(this);
此語句將創建一個新的 ButtonArray 對象。參數(Me 或 this)將引用創建新 ButtonArray 的窗體,並將成為放置按鈕數組的窗體。
在 Solution Explorer(解決方案資源管理器)中,右擊 Form1 並從快捷菜單中選擇 VIEw Designer(視圖設計器)。
在設計器中,雙擊 btnAdd 以打開包含 btnAdd_Click 事件的 Code Editor(代碼編輯器)。
在 btnAdd_Click 方法中,添加代碼以調用 MyControlArray 的 AddNewButton 方法:
-



// C# 
// 調用 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 方法中,添加以下代碼:
-
// C#
// 調用 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(添加按鈕)按鈕。
按鈕將再次被添加到窗體中,並用正確的索引進行編號。
總結
本文演示了如何創建封裝控件數組功能的組件。其中包括如何創建方法以動態地在窗體中添加和刪除控件,以及通過默認的屬性或索引程序來公開對象。因為實現了所有功能,所以可以通過編寫組件的自定義代碼來擴展控件數組。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved