2013-06-03 31 views
0

我有12個複選框(總共32個,但現在只是擔心前12個)名爲checkbox1,複選框2 ...複選框12.我想要一個for循環來查看它們是否被檢查。如果它們被選中,它會更改Excel表格,如果不是,它會繼續。我有電子表格編輯的邏輯和for循環的基本結構,但不知道是否有方法在for循環中使用計數器來引用控件。如何使用visual basic 2010中的變量引用控件?

例如:

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

我有一些人提出了一些東西,即使用與複選框名稱的數組,然後做複選框(I).checked但導致相當多的問題。其他人建議使用controls.containskey和CType,但是這並沒有給出任何編譯或運行時錯誤,電子表格中的任何內容都沒有實際改變,我不知道我做了什麼意思。

有沒有人知道這樣做的簡單方法?

+0

這是winforms嗎? – shahkalpesh

+0

你的複選框都是根據它們的價值做出不同的改變,不是嗎?如果是這樣,那麼通過一個集合迭代並不會真的有幫助,因爲無論如何你必須有一個switch或一堆if語句。 –

+0

是的,這是winforms,迭代將有助於(我認爲)。我想checkbox1,如果選中編輯電子表格的單元格(2,8),選擇checkbox2編輯同一表格的單元格(2,9)等等。我for循環檢查是否(「複選框」和我)被選中,如果是這樣編輯單元格(2,i + 7)。如果不選中,它將繼續爲我的下一個值。 – user2448416

回答

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 
+0

奇妙的,這工作!非常感謝:D – user2448416

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 
2

您可以使用Controls集合訪問複選框。然而,你需要從控制分配(或轉換)的複選框來訪問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 
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 

如果你改變你的命名系統複選框包括分隔符(複選框-1),使其他複選框名稱唯一不同(chckbox13),你可以縮短次e代碼這樣:

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 
相關問題