如何在visual basic 2010中使用变量引用控件?

时间:2013-06-03 15:37:05

标签: vb.net variables reference controls

我有12个复选框(总共32个,但现在只是担心前12个)名为checkbox1,复选框2 ...复选框12.我想要一个for循环来检查它们是否被检查。如果选中它们,则会对Excel工作表进行更改,如果不是,则只会继续。我有电子表格编辑的逻辑和for循环的基本结构,但不知道是否有办法在for循环中使用计数器引用控件。

例如:

 for i as integer = 1 to 12
   if ("Checkbox" & i).checked = True Then
       <--Spreadsheet things happen-->
   End if
 then

我有一些人建议了一些事情,即使用带有复选框名称的数组然后执行复选框(i).checked但这会导致很多问题。其他人建议使用controls.containskey和CType但是虽然没有给出任何编译或运行时错误,但电子表格中的任何内容实际上都没有改变,我不知道我做了什么意味着什么。

有没有人知道这样做的简单方法?

4 个答案:

答案 0 :(得分:3)

使用Controls.Find()方法:

    Dim matches() As Control
    For i As Integer = 1 To 12
        matches = Me.Controls.Find("CheckBox" & i, True)
        If matches.Length > 0 AndAlso TypeOf matches(0) Is CheckBox Then
            Dim cb As CheckBox = DirectCast(matches(0), CheckBox)
            If cb.Checked Then

            End If
        End If
    Next

答案 1 :(得分:2)

您可以使用Controls集合访问复选框。但是,您需要从Control分配(或转换)到Checkbox以访问Checked属性,如下所示:

Dim ctl As Control
Dim chk As CheckBox

For Each ctl In Controls
  If TypeOf ctl Is CheckBox Then
    chk = ctl
    If chk.Checked Then MsgBox(chk.Name & "is checked")
    End If
  Next ctl

答案 2 :(得分:0)

您是在代码中还是在设计器中创建复选框?如果在代码中,请在创建List时将复选框添加到List。如果您正在使用设计器,请将所有复选框添加到构造函数中的 Private myCheckboxes As New List(Of CheckBox) Public Sub New() ' This call is required by the designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. myCheckboxes.Add(checkbox1) myCheckboxes.Add(checkbox2) '''etc End Sub

{{1}}

答案 3 :(得分:0)

这样的事情应该有效:

    For Each cb As CheckBox In Me.Controls.OfType(Of CheckBox)()
        If cb.Name.Contains("checkbox") AndAlso cb.Checked Then
            Select Case cb.Name
                Case "checkbox1"
                    'do stuff
                Case "checkbox2"
                    'do stuff
                Case "checkbox3"
                    'do stuff
                    'and so on ...
            End Select
        End If
    Next

如果您更改复选框的命名系统以包含分隔符(checkbox-1),并使其他复选框名称唯一不同(chckbox13),则可以通过这种方式缩短代码:

    For Each cb As CheckBox In Me.Controls.OfType(Of CheckBox)()
        If cb.Name.Contains("checkbox") AndAlso cb.Checked Then
            edit(cell(2, Integer.Parse(cb.Name.Split("-")(1)) + 7))
        End If
    Next