2012-03-07 75 views
1

我在vb 2008 express用戶窗體的groupbox中有幾個複選框。我想在點擊一個命令按鈕時檢查每一個的檢查狀態,然後寫下用於電子郵件或打印出來的複選框標題。我已經嘗試了幾種方法,並總是以「無效的轉換異常」結尾。我已閱讀msdn的幫助,但仍不明白如何使其工作。這是我一直在試圖檢查複選框狀態並在vb.net中使用下一個循環寫入複選框標籤

Dim chk As CheckBox 
    Dim sb As New System.Text.StringBuilder 
    Dim names As String 
    For Each chk In gbInterior.Controls 
     If chk.Checked Then 
      sb.Append(chk.Text) 
     End If 
    Next chk 
    names = sb.ToString(0, sb.Length - 32) 
    MsgBox(names) 

我也曾嘗試下面的代碼,但無法弄清楚如何檢查狀態和打印複選框標題的代碼。

Dim ctl As Control 
    For Each ctl In gbInterior.Controls 
    If TypeOf ctl Is CheckBox Then 
    MsgBox(ctl.Text & vbNewLine) 
    End If 
    Next ctl 

謝謝你的幫助。

回答

0
If TypeOf ctl Is CheckBox AndAlso CType(ctl, CheckBox).Checked Then 
    MsgBox(CType(ctl, CheckBox).Text & vbNewLine) 
End If 
+0

謝謝,它像你一樣新的工作。 – UBel 2012-03-08 13:48:20

1

您的問題源於循環遍歷窗體上的所有控件,並嘗試將每個控件設置爲類型複選框的控件。複選框只是一種類型的控件,並且不能將按鈕投射到該控件中,所以這就是爲什麼你需要投射問題。

Dim ctrl As Control 
Dim sb As New System.Text.StringBuilder 
Dim names As String 
For Each ctrl In gbInterior.Controls 
    If TypeOf ctrl Is CheckBox andalso CType(ctrl, CheckBox).Checked Then 
     sb.Append(CType(ctrl, CheckBox).Text) 
    End If 
Next ctrl 
names = sb.ToString(0, sb.Length - 32) 
MsgBox(names) 
+0

謝謝你對我的錯誤的解釋。我收到了3個答案,都是正確的,並回答了我的問題。我可以檢查所有答案嗎? – UBel 2012-03-08 13:45:04

+0

不幸的是,只有一個可以被接受爲答案。 – UnhandledExcepSean 2012-03-08 14:55:37

4

看起來你正在尋找的Checked財產上Control,不具有這樣的屬性。

嘗試聲明你的變量爲複選框,並通過控制類型篩選列表:

For Each chk As CheckBox In gbInterior.Controls.OfType(Of CheckBox)() 
    If chk.Checked Then 
    sb.Append(chk.Text) 
    End If 
Next 
+0

感謝您提供正確的代碼,但更重要的是解釋我的錯誤。我從來沒有得到任何正確的答案,所以我可以檢查所有答案?現在你已經幫助我解決了這個問題,我該如何將結果寫入電子郵件正文?我使用msgbox進行測試。我在電子郵件正文中使用+ vbCrLf +「cabinet lock is」+ cbLock.Text _。 – UBel 2012-03-08 13:41:48

+1

@UBel將'sb.Append(...)'改爲'sb.AppendLine(...)',它將把每個文本項放在一個單獨的行上。如果您問的是將其實際插入到電子郵件正文中,這有點超出了這個問題的範圍,但對谷歌來說很容易。只有一篇文章可以標記爲asnwer,但如果* any *答案對您有幫助,您可以對其中的任何一個進行提示,而不僅僅針對您的問題。 – LarsTech 2012-03-08 13:48:24

+0

非常感謝,這是你第二次幫助我,你的知識非常感謝。 – UBel 2012-03-08 19:34:23