将多个控件分配给数组

时间:2015-05-12 18:57:13

标签: vb.net winforms

我正在尝试在我拥有的几个文本框上使用Ctype,以便我可以将它们放在像这样的数组中

    dim textboxes(12) as textbox
    for i=0 to 11
        textboxes(i) = Ctype(form1.controls("textbox" & i+1), textbox)
    next

这适用于我的大多数控件。但是,对于TabControl中的任何控件,它都不起作用。我认为可能会做像

这样的事情
    Ctype(form1.tabcontrol.control("textbox" & i+1), textbox)

可能会奏效,但它似乎也无济于事。

其他信息:这是一个winforms项目。

2 个答案:

答案 0 :(得分:0)

TabControls有一个TabPage集合,它有一个Control集合。您需要扫描所有这些内容。只需扫描它们并检查它们是否确实是复选框。

另外,我强烈建议你使用迭代器( For Each 是迭代器的语法糖),索引在某些时候会变得混乱。

dim myBoxes as new List(of TextBox)

For each tab as TabPage in form1.tabcontrol.TabPages
    For each ctrl as Control in tab.Controls
         If ctrl.GetType() Is GetType(TextBox)
             myBoxes.Add(Ctype(ctrl, TextBox))
         End If
    Next
Next

'If you do need an array
return myBoxes.ToArray()

答案 1 :(得分:0)

我找到了我最初问题的答案。汉斯在评论中指出,

  

TabControl上的控件位于其选项卡页面上,而不是TabControl本身。

所以正确的代码是这样的:

    dim textboxes(12) as textbox
    for i=0 to 11
        textboxes(i) = Ctype(form1.tabcontrol.tabpages(0).controls("textbox" & i+1), textbox)
    next

在做了一些研究并阅读其他用户的各种评论和警告之后,我意识到这不是解决这个问题的最佳方法,我不需要为我的文本框初始化一个数组。最好不要将它们放在一个数组中,以便更容易调用它们,而只是像这样调用它们

for i=0 to 11
    form1.tabcontrol.tabpages(0).controls("textbox" & i+1).text = "sometext"
next