2010-09-25 80 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。