проверьте состояние флажков и напишите метку флажка в vb.net, используя для следующего цикла - PullRequest
1 голос
/ 07 марта 2012

У меня есть несколько флажков в групповом поле в пользовательской форме vb 2008 express. Я хотел бы проверить статус каждого из них при нажатии кнопки и затем написать подпись для флажков, которые будут использоваться в электронном письме или распечатаны. Я пробовал несколько методов и всегда заканчивался одной и той же ошибкой «Invalid Cast Exception». Я прочитал справку по MSDN и до сих пор не понимаю, как заставить его работать. Вот код, который я пробовал

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

Спасибо за вашу помощь.

Ответы [ 3 ]

4 голосов
/ 08 марта 2012

Похоже, вы ищете свойство Checked для Control, у которого нет такого свойства.

Попробуйте объявить вашу переменную как CheckBox и отфильтровать список поТип управления:

For Each chk As CheckBox In gbInterior.Controls.OfType(Of CheckBox)()
  If chk.Checked Then
    sb.Append(chk.Text)
  End If
Next
1 голос
/ 07 марта 2012

Ваша проблема связана с обходом всех элементов управления в форме и попыткой установить для каждого элемента управления флажок типа. Флажок - это только один тип элемента управления, и кнопка не может быть вставлена ​​в него, поэтому у вас возникают проблемы с приведением типов.

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 голосов
/ 08 марта 2012
If TypeOf ctl Is CheckBox AndAlso CType(ctl, CheckBox).Checked Then  
   MsgBox(CType(ctl, CheckBox).Text & vbNewLine) 
End If 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...