在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组
在 Visual Basic .NET 和 Visual C# .NET 中創(chuàng)建控件數(shù)組
摘要:本文介紹如何使用 Visual Basic? .NET 和 Visual C#? .NET 創(chuàng)建和管理控件數(shù)組。目錄
- 簡(jiǎn)介
- 前提
- 創(chuàng)建項(xiàng)目
- 實(shí)現(xiàn)集合
- 公開控件數(shù)組
- 創(chuàng)建公共事件處理程序
- 測(cè)試項(xiàng)目
- 總結(jié)
簡(jiǎn)介
數(shù)組為使用共享公共功能的控件組提供了一種方便的方式。例如,控件組可以用來顯示相關(guān)數(shù)據(jù),或者在單擊時(shí)提供相關(guān)的操作。Visual Basic .NET 和 C# 本身并不支持創(chuàng)建控件數(shù)組,但您可以通過編程來復(fù)制控件數(shù)組的全部功能。本文將指導(dǎo)您創(chuàng)建一個(gè)復(fù)制控件數(shù)組功能的簡(jiǎn)單組件。
控件數(shù)組的某些用處如下所示:
通過索引訪問具有相同名稱的控件集合,您可以按編號(hào)檢索和設(shè)置屬性,并遍歷數(shù)組中的所有控件。這一操作的典型語法如下:' Visual Basic 偽代碼MyControl(myIndex).MyProperty = myValue
MyControl(myIndex + 1).MyMethod
// C# 偽代碼
myControl[myIndex].myProperty = myValue;
myControl[myIndex + 1].myMethod 使用單個(gè)事件處理程序處理多個(gè)控件的事件,檢索并使用這些事件中的索引,如下例所示:' Visual Basic 偽代碼
Private Sub MyControl_Click(sender as Object, e as EventArgs)
Messagebox.Show("您已單擊 MyControl 編號(hào)" & _
MyControl.Index)
End Sub
// C# 偽代碼
private void myControl_Click(System.Object sender, System.EventArgs e)
{
Messagebox.Show("您已單擊 MyControl 編號(hào)" +
MyControl.Index);
} 在運(yùn)行時(shí)動(dòng)態(tài)添加或刪除控件,如下所示:' Visual Basic 偽代碼
Dim i as Integer
For i = 1 to 5
' 插入代碼以創(chuàng)建控件并為屬性分配值。
Next i
// C# 偽代碼
for (int i = 1; i < 6; i++)
{
// 插入代碼以創(chuàng)建控件并為屬性分配值。
}
Visual Basic .NET 和 C# 允許您復(fù)制部分此類功能,例如,使用代理將多個(gè)控件中的事件綁定到單個(gè)事件處理程序。但是,如果將該功能并入單個(gè)動(dòng)態(tài)的、易于管理的組件,可能會(huì)更方便。本文中,我們將創(chuàng)建使用以下內(nèi)容的組件:
索引和排序控件的集合。按鈕集合將用于演示。 處理來自派生按鈕的單擊事件的事件處理程序。 允許通過索引引用控件及其成員的代碼。 在窗體中動(dòng)態(tài)添加和刪除控件的代碼。前提
熟悉組件及其工作原理。 對(duì)多態(tài)有所了解。有關(guān)詳細(xì)信息,請(qǐng)參閱 Polymorphism in Components(英文)。 了解 Visual Basic .NET 或 C# .NET 語法。創(chuàng)建項(xiàng)目
本節(jié)中,我們將創(chuàng)建和命名項(xiàng)目,并在項(xiàng)目中添加一個(gè)類。該類將封裝實(shí)現(xiàn)控件數(shù)組的代碼。
創(chuàng)建 ButtonArrayProject 和 ButtonArray 組件
在 File(文件)菜單上,指向 New(新建),然后選擇 Project(項(xiàng)目)以打開 New Project(新建項(xiàng)目)對(duì)話框。 從 Visual Basic 或 Visual C# 項(xiàng)目列表中選擇 Windows Application(Windows 應(yīng)用程序)項(xiàng)目模板,并在 Name(名稱)框中鍵入 ButtonArrayProject。 從 File(文件)菜單中,選擇 Save All(全部保存)以保存項(xiàng)目。實(shí)現(xiàn)集合
ButtonArray 類將通過實(shí)現(xiàn)集合來完成支持和組織控件數(shù)組的任務(wù)。集合是一個(gè)對(duì)象,它包含經(jīng)過索引的對(duì)象變量的列表,以及在集合中添加、刪除或者操作對(duì)象的方法。本節(jié)中,我們將創(chuàng)建繼承自 System.Collections.CollectionBase(.NET 框架中的類,提供集合所需的很多功能)的類,并實(shí)現(xiàn)提供所需功能的方法。
創(chuàng)建繼承的類
從 Project(項(xiàng)目)菜單中,選擇 Add Class(添加類)。 相應(yīng)地將類命名為 ButtonArray.vb 或 ButtonArray.cs。將打開包含該類的 Code Editor(代碼編輯器)。
在類聲明中,指定此類是從 .NET 框架的 System.Collections.CollectionBase 類繼承而來的。' Visual BasicPublic Class ButtonArray
Inherits System.Collections.CollectionBase
End Class
// C#
public class ButtonArray : System.Collections.CollectionBase
{
// 省略了由設(shè)計(jì)器添加的代碼。
}
System.Collections.CollectionBase 類提供集合所需的許多功能。其中包括 List 對(duì)象(跟蹤集合所包含的對(duì)象)、Count 屬性(維護(hù)當(dāng)前集合中的對(duì)象總數(shù))和 RemoveAt 方法(按特定索引刪除對(duì)象)。在實(shí)現(xiàn)控件數(shù)組集合時(shí),要用到這些功能。
由于所有控件數(shù)組組件都要與一個(gè)窗體相關(guān)聯(lián),因此需要添加一個(gè)字段以保留對(duì)該窗體的引用。通過創(chuàng)建專用的只讀字段來保留該引用,可以確保每個(gè)控件數(shù)組組件只與一個(gè)窗體相關(guān)聯(lián)。
在組件中添加專用的只讀字段
直接在類聲明中添加以下行:' Visual BasicPrivate ReadOnly HostForm as System.Windows.Forms.Form
// C#
private readonly System.Windows.Forms.Form HostForm;
必須在集合中實(shí)現(xiàn)的第一個(gè)方法是 AddNewButton。此方法將創(chuàng)建新的按鈕控件,并將其添加到所需的窗體中。還需要使用此方法設(shè)置新按鈕的初始屬性。
實(shí)現(xiàn) AddNewButton 方法
在包含 ButtonArray 類的 Code Editor(代碼編輯器)中,鍵入以下代碼:Public Sub AddNewButton()' 創(chuàng)建 Button 類的新實(shí)例。
Dim aButton As New System.Windows.Forms.Button()
' 將按鈕添加到集合的內(nèi)部列表。
Me.List.Add(aButton)
' 將按鈕添加到由 HostForm 字段
' 引用的窗體的控件集合中。
HostForm.Controls.Add(aButton)
' 設(shè)置按鈕對(duì)象的初始屬性。
aButton.Top = Count * 25
aButton.Left = 100
aButton.Tag = Me.Count
aButton.Text = "按鈕 " & Me.Count.ToString
End Sub
// C#
public void AddNewButton()
{
// 創(chuàng)建 Button 類的新實(shí)例。
System.Windows.Forms.Button aButton = new
System.Windows.Forms.Button();
// 將按鈕添加到集合的內(nèi)部列表。
this.List.Add(aButton);
// 將按鈕添加到由 HostForm 字段
// 引用的窗體的控件集合中。
HostForm.Controls.Add(aButton);
// 設(shè)置按鈕對(duì)象的初始屬性。
aButton.Top = Count * 25;
aButton.Left = 100;
aButton.Tag = this.Count;
aButton.Text = "按鈕 " + this.Count.ToString();
}
此方法將:
創(chuàng)建新按鈕。 將新按鈕添加到內(nèi)部列表和由 HostForm 引用的窗體的控件集合中。 設(shè)置初始屬性,包括將 Tag 屬性設(shè)置為按鈕的索引。您可以在本節(jié)中添加代碼以設(shè)置控件的其他屬性。還必須創(chuàng)建一個(gè)構(gòu)造函數(shù)(對(duì)組件進(jìn)行實(shí)例化時(shí)運(yùn)行的方法),用于設(shè)置 HostForm 字段的值,并且只要?jiǎng)?chuàng)建控件數(shù)組類的新實(shí)例,便可自動(dòng)在窗體中添加新按鈕。您可以通過以下方式完成此任務(wù)。
創(chuàng)建構(gòu)造函數(shù)
創(chuàng)建類的構(gòu)造函數(shù)。' Visual BasicPublic Sub New(ByVal host as System.Windows.Forms.Form)
HostForm = host
Me.AddNewButton()
End Sub
// C#
// 使用此構(gòu)造函數(shù)替換默認(rèn)的構(gòu)造函數(shù)。
public ButtonArray(System.Windows.Forms.Form host)
{
HostForm = host;
this.AddNewButton();
}
構(gòu)造函數(shù)需要一個(gè)參數(shù),即放置按鈕數(shù)組的窗體。它指定提供給 HostForm 字段的值,然后調(diào)用類的 AddNewButton 方法在窗體中添加新按鈕。
公開控件數(shù)組
您已經(jīng)創(chuàng)建了一種方法在數(shù)組中創(chuàng)建和跟蹤控件,現(xiàn)在需要向其他開發(fā)人員公開這些控件。可以使用一個(gè)屬性來執(zhí)行此操作。您將創(chuàng)建一個(gè)默認(rèn)屬性 (Visual Basic) 或索引程序 (C#),根據(jù)索引返回一個(gè)對(duì)特定按鈕的引用。這也使您能夠通過編程方式使用控件數(shù)組的典型 MyButtonArray(myIndex) 語法。
創(chuàng)建默認(rèn)屬性
在組件中添加以下代碼。' 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 Get
End Property
// C#
public System.Windows.Forms.Button this [int Index]
{
get
{
return (System.Windows.Forms.Button) this.List[Index];
}
}
實(shí)現(xiàn) Remove 方法
您已經(jīng)創(chuàng)建了公開數(shù)組中的按鈕所需的屬性,現(xiàn)在可以實(shí)現(xiàn)從數(shù)組中刪除按鈕的機(jī)制。要從數(shù)組中刪除按鈕,必須從集合的內(nèi)部 List 對(duì)象和窗體的 Controls 集合中將其刪除。
實(shí)現(xiàn) Remove 方法
在組件中添加以下方法。' Visual BasicPublic Sub Remove()
' 檢查以確保存在要?jiǎng)h除的按鈕。
If Me.Count > 0 Then
' 從宿主窗體控件集合中刪除添加到數(shù)組
' 的最后一個(gè)按鈕。請(qǐng)注意在訪問數(shù)組時(shí)
' 默認(rèn)屬性的使用。
HostForm.Controls.Remove(Me(Me.Count -1))
Me.List.RemoveAt(Me.Count -1)
End If
End Sub
// C#
public void Remove()
}
// 檢查以確保存在要?jiǎng)h除的按鈕。
if (this.Count > 0)
{
// 從宿主窗體控件集合中刪除添加到數(shù)組
// 的最后一個(gè)按鈕。請(qǐng)注意在訪問數(shù)組時(shí)
// 索引的使用。
HostForm.Controls.Remove(this[this.Count -1]);
this.List.RemoveAt(this.Count -1);
}
}
創(chuàng)建公共事件處理程序
最后一步是創(chuàng)建事件處理程序以處理數(shù)組的公共事件。本例中,我們將創(chuàng)建一種方法來處理按鈕的單擊事件,然后添加代碼以將事件與事件處理程序相關(guān)聯(lián)。
創(chuàng)建公共事件處理程序
在組件中添加以下方法。' 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);
}
此方法顯示一個(gè)消息框,通過檢索存儲(chǔ)在按鈕的 Tag 屬性中的索引來指示單擊了什么按鈕。注意,此方法的簽名與它將要處理的事件的簽名相同,這是事件處理程序所要求的。
您還需要將事件與事件處理程序相關(guān)聯(lián)。
將事件與事件處理程序相關(guān)聯(lián)
在 AddNewButton 方法中添加以下代碼。' Visual BasicAddHandler aButton.Click, AddressOf ClickHandler
// C#
aButton.Click += new System.EventHandler(ClickHandler);
測(cè)試項(xiàng)目
完成項(xiàng)目之后,您需要?jiǎng)?chuàng)建一個(gè)應(yīng)用程序來測(cè)試組件的功能。
創(chuàng)建測(cè)試應(yīng)用程序
在 Solution Explorer(解決方案資源管理器)中,右擊 Form1 并從快捷菜單中選擇 View Designer(視圖設(shè)計(jì)器)。將打開包含 Form1 的設(shè)計(jì)器。
從工具箱中,將兩個(gè)按鈕添加到窗體中。 將這些按鈕重新定位到窗體的右側(cè)。 按以下所示設(shè)置按鈕的屬性。| Button1 | btnAdd | 添加按鈕 |
| Button2 | btnRemove | 刪除按鈕 |
將打開包含 Form1 的 Code Editor(代碼編輯器)。
在 Form1 的類聲明中,聲明控件數(shù)組對(duì)象。' Visual Basic' 聲明新的 ButtonArray 對(duì)象。
Dim MyControlArray as ButtonArray
// C#
// 聲明新的 ButtonArray 對(duì)象。
ButtonArray MyControlArray; 在窗體的構(gòu)造函數(shù)中,在方法末尾前面添加以下代碼:' Visual Basic
MyControlArray = New ButtonArray(Me)
// C#
MyControlArray = new ButtonArray(this);
此語句將創(chuàng)建一個(gè)新的 ButtonArray 對(duì)象。參數(shù)(Me 或 this)將引用創(chuàng)建新 ButtonArray 的窗體,并將成為放置按鈕數(shù)組的窗體。
在 Solution Explorer(解決方案資源管理器)中,右擊 Form1 并從快捷菜單中選擇 View Designer(視圖設(shè)計(jì)器)。 在設(shè)計(jì)器中,雙擊 btnAdd 以打開包含 btnAdd_Click 事件的 Code Editor(代碼編輯器)。 在 btnAdd_Click 方法中,添加代碼以調(diào)用 MyControlArray 的 AddNewButton 方法:' Visual Basic' 調(diào)用 MyControlArray 的 AddNewButton 方法。
MyControlArray.AddNewButton()
' 更改按鈕 0 的 BackColor 屬性。
MyControlArray(0).BackColor = System.Drawing.Color.Red
// C#
// 調(diào)用 MyControlArray 的 AddNewButton 方法。
MyControlArray.AddNewButton();
// 更改按鈕 0 的 BackColor 屬性。
MyControlArray[0].BackColor = System.Drawing.Color.Red; 在 Solution Explorer(解決方案資源管理器)中,右擊 Form1 并從快捷菜單中選擇 View Designer(視圖設(shè)計(jì)器)。 在設(shè)計(jì)器中,雙擊 btnRemove 以打開包含 btnRemove_Click 事件的 Code Editor(代碼編輯器)。 在 btnRemove_Click 方法中,添加以下代碼:' Visual Basic
' 調(diào)用 MyControlArray 的 Remove 方法。
MyControlArray.Remove()
// C#
// 調(diào)用 MyControlArray 的 Remove 方法。
MyControlArray.Remove(); 保存項(xiàng)目。
測(cè)試項(xiàng)目
從 Debug(調(diào)試)菜單中,選擇 Start(開始)。將打開 Form1,其中包含三個(gè)按鈕,分別標(biāo)為 Add Button(添加按鈕)、Remove Button(刪除按鈕)和 Button 1(按鈕 1)。
單擊 Button 1(按鈕 1)。注意,屏幕將顯示一個(gè)消息框,其中正確顯示了索引。
單擊幾次 Add Button(添加按鈕)按鈕。每單擊一次都會(huì)向窗體添加一個(gè)新按鈕。單擊每個(gè)新按鈕都將顯示一個(gè)消息框,正確報(bào)告該按鈕的索引。另外請(qǐng)注意,Button 0(按鈕 0)的顏色已變?yōu)榧t色,這是由于 btnAdd_Click 事件中的以下行所導(dǎo)致的:
MyControlArray(0).BackColor = System.Drawing.Color.Red 單擊幾次 Remove Button(刪除按鈕)按鈕。每單擊一次都會(huì)從窗體中刪除一個(gè)按鈕。
單擊此按鈕,直至刪除窗體左側(cè)的所有按鈕。 再次單擊 Add Button(添加按鈕)按鈕。按鈕將再次被添加到窗體中,并用正確的索引進(jìn)行編號(hào)。
轉(zhuǎn)載于:https://www.cnblogs.com/JoinZhang/archive/2005/09/05/230256.html
總結(jié)
以上是生活随笔為你收集整理的在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArcMap进行数据拓扑检查
- 下一篇: 摩拜单车探索性分析