2017-05-05 67 views
0

下面是我正在嘗試執行的操作,我想將所有項目選中或選中複選框,並將其放入一個 字符串數組中,然後將其顯示在動態數組上通過一個按鈕觸發標籤.. 下面是我迄今爲止嘗試過的代碼......如何將複選框的選定項目放到字符串數組中

Dim arraySize As Integer 
Dim lbl() As Label 
Dim str() As String 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Label1.Text = arraySize 
End Sub 
Private Sub chkOption1_CheckedChanged(sender As Object, e As EventArgs) Handles chkOption1.CheckedChanged 
    If chkOption1.Checked = True Then 
     arraySize = arraySize + 1 
    Else 
     arraySize = arraySize - 1 
    End If 
    Label1.Text = arraySize 
End Sub 
Private Sub chkOption2_CheckedChanged(sender As Object, e As EventArgs) Handles chkOption2.CheckedChanged 
    If chkOption2.Checked = True Then 
     arraySize = arraySize + 1 
    Else 
     arraySize = arraySize - 1 
    End If 
    Label1.Text = arraySize 
End Sub 
Private Sub chkOption3_CheckedChanged(sender As Object, e As EventArgs) Handles chkOption3.CheckedChanged 
    If chkOption3.Checked = True Then 
     arraySize = arraySize + 1 
    Else 
     arraySize = arraySize - 1 
    End If 
    Label1.Text = arraySize 
End Sub 
Private Sub chkOption4_CheckedChanged(sender As Object, e As EventArgs) Handles chkOption4.CheckedChanged 
    If chkOption4.Checked = True Then 
     arraySize = arraySize + 1 
    Else 
     arraySize = arraySize - 1 
    End If 
    Label1.Text = arraySize 
End Sub 
Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click 
    ReDim lbl2(arraySize) 
    ReDim str(arraySize) 
    For ctr = 1 To lbl2.Length - 1 
     lbl(ctr) = New Label 
     lbl(ctr).Width = 60 
     lbl(ctr).Height = 40 
     If ctr = 1 Then 
      lbl(ctr).Left = 20 
     Else 
      lbl(ctr).Left = ((lbl2(ctr).Width + 20) * ctr) - 60 
     End If 
     lbl(ctr).Top = Me.Height - lbl(ctr).Height * (5/2) 
     Me.Controls.Add(lbl(ctr)) 
    Next 
    For ctrs = 1 To gn.Length - 1 
     If chkAction.Checked = True Then 
      str(ctrs) = "Action" 
     End If 
     If chkFantasy.Checked = True Then 
      str(ctrs) = "Fantasy" 
     End If 
     If chkMystery.Checked = True Then 
      str(ctrs) = "Mystery" 
     End If 
     If chkWar.Checked = True Then 
      str(ctrs) = "War" 
     End If 
     lbl(ctrs).Text = str(ctrs) 
    Next 
End Sub 

的問題是,當我選擇或選中一個或多個複選框,即 顯示在一個在標籤總是根據其順序中的最後複選框。例如我查chkOption1,chkOption3, chkOption2,標籤上的輸出都是「chkOption3」。如果我檢查的項目,然後按下按鈕一次一個將 顯示,我想在標籤右邊的值。但是,我所要做的是,如果我選擇一個或多個 複選框,將通過一個按鈕只需輕輕點擊一下顯示在標籤中的所有值,例如我選擇選項1,3選項,選項3,選項2,然後它會 秀標籤中的所有值option1到4 ...所以我該怎麼做?請幫忙。在此先感謝...

回答

0

我會去與List(Of T)For Each

的原則在這裏是檢查CheckBox類型的每個控制和檢索它的值,並將其添加到列表中。

如果該複選框是GroupBox 或其他容器中要小心,這是不行的。如果是這樣的話,那麼你通過 需要循環容器的所有控件。

Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click 
    Label1.Text = "" 
    Dim SelectedGenres As List(Of String) 
    SelectedGenres = GetGenres() 
    For Each Genre As String In SelectedGenres 
     Label1.Text = Label1.Text & vbNewLine & Genre 
    Next 
End Sub 

然後會用這樣的函數:

Public Function GetGenres() As List(Of String) 
    Dim Genres As New List(Of String) 
    Genres.Clear() 
    For Each ctrl As Control In Me.Controls 
     'If the control is of type Checkbox 
     Dim CurrentCheckbox As CheckBox 
     If TypeOf ctrl Is CheckBox Then 
      CurrentCheckbox = ctrl 
      If CurrentCheckbox.Checked = True Then 
       Genres.Add(CurrentCheckbox.Text) 
      End If 
     End If 
    Next 
    Return Genres 
End Function 
0

我會強烈建議你使用一個列表,而不是一個數組的,特別是因爲大小不同而不同。你不需要保持數組的大小。只需使用一個列表(串)

Dim selectedActions As New List(Of String) 

If chkAction.Checked Then selectedActions.Add("Action") 
If chkFantasy.Checked Then selectedActions.Add("Fantasy") 
If chkMystery.Checked Then selectedActions.Add("Mystery") 
If chkWar.Checked Then selectedActions.Add("War") 

然後你有你的ARRAYSIZE

selectedAction.Count 

只是循環,列出來獲取信息

For ctr = 0 To selectedActions.Count-1 
    Dim lbl As New Label 
    lbl.Width = 60 
    lbl.Height = 40 
    If ctr = 1 Then 
     lbl.Left = 20 
    Else 
     lbl.Left = ((lbl2(ctr).Width + 20) * ctr) - 60 
    End If 
    lbl.Top = Me.Height - lbl.Height * (5/2) 
    Me.Controls.Add(lbl) 

    lbl.Text = selectedActions(ctrs) 
Next 

如果值的最大數量是固定的。你只需添加空標籤和隱藏/顯示或設置。文本爲「」如果沒有價值這可能是更容易。在你的代碼中,你會每次創建新的標籤。

+0

我原本以爲這樣做,但後來我採用動態方法,因爲可能有很多複選框,如果 – Mederic

+0

@Mederic這是一個很好的點,它可能會煩人硬編碼。當你得到它的工作,你可以看看使用網格(取決於你希望你的UI如何工作)。 –

+0

我沒問我居然用動態的形式給出回答了這個問題笑 – Mederic

相關問題