在 Visual Basic .NET 和 Visual C# .NET 中建立控制項數組

來源:互聯網
上載者:User



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 = myValue
    MyControl(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 Integer
    For 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 Basic
    Public Class ButtonArray
    Inherits System.Collections.CollectionBase
    End Class

    // 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()
    ' 建立 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();
    }

此方法將:

  1. 建立新按鈕。
  2. 將新按鈕添加到內部列表和由 HostForm 引用的表單的控制項集合中。
  3. 設定初始屬性,包括將 Tag 屬性設定為按鈕的索引。您可以在本節中添加代碼以設定控制項的其他屬性。

還必須建立一個建構函式(對組件進行執行個體化時啟動並執行方法),用於設定 HostForm 欄位的值,並且只要建立控制項數組類的新執行個體,便可自動在表單中添加新按鈕。您可以通過以下方式完成此任務。

建立建構函式

  • 建立類的建構函式。
    ' Visual Basic
    Public 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 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

    // C#
    public System.Windows.Forms.Button this [int Index]
    {
    get
    {
    return (System.Windows.Forms.Button) this.List[Index];
    }
    }
實現 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

    // C#
    public void Remove()
    }
    // 檢查以確儲存在要刪除的按鈕。
    if (this.Count > 0)
    {
    // 從宿主表單控制項集合中刪除添加到數組
    // 的最後一個按鈕。請注意在訪問數組時
    // 索引的使用。
    HostForm.Controls.Remove(this[this.Count -1]);
    this.List.RemoveAt(this.Count -1);
    }
    }
建立公用事件處理常式

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

建立公用事件處理常式

  • 在組件中添加以下方法。
    ' Visual Basic
    Public 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 Basic
    AddHandler aButton.Click, AddressOf ClickHandler

    // C#
    aButton.Click += new System.EventHandler(ClickHandler);
測試專案

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

建立測試應用程式

  1. 在 Solution Explorer(方案總管)中,右擊 Form1 並從捷徑功能表中選擇 View Designer(視圖設計器)。

    將開啟包含 Form1 的設計器。

  2. 從工具箱中,將兩個按鈕添加到表單中。
  3. 將這些按鈕重新置放到表單的右側。
  4. 按以下所示設定按鈕的屬性。
    按鈕 名稱 文本
    Button1 btnAdd 添加按鈕
    Button2 btnRemove 刪除按鈕
  5. 在 Solution Explorer(方案總管)中,右擊 Form1 並從捷徑功能表中選擇 View Code(查看代碼)。

    將開啟包含 Form1 的 Code Editor(代碼編輯器)。

  6. 在 Form1 的類聲明中,聲明控制項數組對象。
    ' Visual Basic
    ' 聲明新的 ButtonArray 對象。
    Dim MyControlArray as ButtonArray

    // C#
    // 聲明新的 ButtonArray 對象。
    ButtonArray MyControlArray;
  7. 在表單的建構函式中,在方法末尾前面添加以下代碼:
    ' Visual Basic
    MyControlArray = 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 方法中,添加代碼以調用 MyControlArrayAddNewButton 方法:
    ' 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(添加按鈕)按鈕。

    按鈕將再次被添加到表單中,並用正確的索引進行編號。

總結

本文示範了如何建立封裝控制項數組功能的組件。其中包括如何建立方法以動態地在表單中添加和刪除控制項,以及通過預設的屬性或索引程式來公開對象。因為實現了所有功能,所以可以通過編寫組件的自訂代碼來擴充控制項數組。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.