2010-09-25 77 views
2

如何創建控制數組?或者相當於。Visual Basic 2010創建控制數組

我用Visual Basic 6中呈現的是否當我複製和粘貼和控制創建控件數組的選項。

+0

我不記得,是控制數組,所以你可以動態地添加新的控件到窗體?這是你想要達到的目標嗎? – MikeG 2010-09-25 21:22:13

回答

6

控制陣列早已不復存在。面向對象的方法現在是VB的土地法則。

您需要使用某種形式的集合,如list

0

VB6中的控制數組完全存在以允許單個事件處理程序用於同一類型的多個控件。

private sub Button_Click(...) Handles Command1.Click, Command2.Click, Command3.Click 

end sub 
+1

不完全。他們還允許您在一個表單上放置超過256個控件。 – Kaniu 2010-09-28 19:13:59

+0

@Kaniu不一定。你可以使用'Controls.Add'來做同樣的事情,而不需要創建一個控制數組。 – GSerg 2010-09-28 19:19:43

+0

僅當您想要(並且能夠)在運行時添加控件時。但是,如果有十幾個標籤頁充滿了控件,那可能不是真正的選擇。 – Kaniu 2010-09-29 19:15:46

2

其容易被忽視的控制陣列的另一種隱式特徵是數字索引的與陣列的每個元素的關聯:

您通過將控制進入Handles子句爲此在VB.NET 。索引可以是任何正整數,只要它們在集合中唯一;他們不必是連續的。因此,數組更像是一個由整數索引的字典,每個項值都是特定控件類型的一個實例。

邏輯在用於控制陣列的VB6事件處理程序獲取索引的值與該事件的屬性被處理沿着。處理程序中的邏輯通常使用索引來確定哪個控件實例正在引發事件。

.NET事件處理程序有很大不同。您通常會獲取對特定控件實例的引用,以及具有要處理的事件屬性的特定事件對象的實例。你不會得到索引。

此外,VB6應用程序有時具有將控制數組迭代/操作爲數組的邏輯。

在我們默認的翻譯,我們盡力支持,明確依賴該控件數組及其索引在傳統VB6邏輯。我們將控件數組重寫爲一組單獨的控件實例,然後將它們添加到表單初始化期間的通用OrderDictionary < int,controlType>中。單個控件訂閱事件,我們可以使用集合來查找給定控件實例的索引或迭代/操作「數組」中的項目。如果你不明確需要索引或數組,你可以擺脫集合。

動態添加控制是更多的工作現在 - 這是概念性地像將項目添加到所述控制陣列和與VB6(負載對照)單個語句支撐。據我所知,在.NET中,你需要克隆一個控件,明確地複製屬性,並明確地連接事件處理程序。它可以用反射和其他中等先進技術進行推廣 - 但它肯定不是簡單地稱爲「負載控制」。如果在.NET中有更簡單的方法來做到這一點,我很樂意聽到它。 FWIW:我們翻譯成幫助功能。

0

有三種創建控制數組的方法。

  1. 分配相同的名稱不止一個控制。
  2. 複製福音控制並將其過濾到窗體中。
  3. 將索引正確設置爲非空值。
0

您只能通過代碼行事。例如:

Dim c() As TextBox 
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    Dim j As Integer 
    For j = 0 To 10 
     ReDim Preserve c(j) 
     c(j) = New TextBox 
     c(j).Name = "txt" & j 
     c(j).Parent = Me 
     c(j).Top = j * c(j).PreferredHeight + 2 
     c(j).Tag = j 
     c(j).Visible = True 
     AddHandler c(j).KeyPress, AddressOf TestKeyPress 
    Next 
End Sub 

Public Sub TestKeyPress(source As Object, e As KeyPressEventArgs) 
    Dim index As Integer 
    index = CInt(source.tag) 
    If index >= 5 Then 
     If e.KeyChar > "9" Or e.KeyChar < "0" Then 
      e.Handled = True 
     End If 
    Else 
     If e.KeyChar <= "9" And e.KeyChar >= "0" Then 
      e.Handled = True 
     End If 
    End If 
End Sub 

這將創建11個文本框,分配給所有相同的事件處理程序。

TAG屬性用於存儲和檢索文本框的idex。