如何在 Vb.net 中将仅有的 "Checked" 复选框的文本显示在消息框中?



我使用的是vb.net,这是我的问题。假设我有3个复选框。

  • 披萨
  • 冰淇淋
  • Fries

我想做的是当我点击";Pizza";以及";Fries";,Msgbox将只向我显示";"已检查";复选框:

  • 披萨
  • Fries

并且不包括未选中的一个复选框。任何帮助都将不胜感激!!!

MessageBox.Show(String.Join(", ",
Controls.OfType(Of CheckBox)().
Where(Function(cb) cb.Checked).
Select(Function(cb) cb.Text)))

这假设所有CheckBoxes都直接在表单上,并且它们是表单上唯一的CheckBoxes。如果它们在其他子容器中,则使用该容器的Controls集合。如果同一个容器中可能有其他CheckBoxes,你可以添加一个Panel,然后只放这些CheckBoxes。如果你更喜欢使用查询语法而不是函数语法的LINQ:

MessageBox.Show(String.Join(", ",
From cb In Controls.OfType(Of CheckBox)()
Where cb.Checked
Select cb.Text))
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler chkFiries.CheckedChanged, AddressOf checkedChanged
AddHandler chkIcecream.CheckedChanged, AddressOf checkedChanged
AddHandler chkPizza.CheckedChanged, AddressOf checkedChanged
End Sub
Private Sub checkedChanged(sender As Object, e As System.EventArgs)
Dim checkedNames As String
For Each ctrl As Control In Me.Controls
If TypeOf ctrl Is CheckBox Then
Dim chkbox = TryCast(ctrl, CheckBox)
If chkbox.Checked = True Then
checkedNames += chkbox.Text & ","
End If
End If
Next
MessageBox.Show(checkedNames)
End Sub

最新更新