Visual Basic多次if函数一次

时间:2014-03-31 07:44:34

标签: vb.net

我有10个组合框,每个框中有5个单选按钮。所有10个组合框都有相同的选项(是,否,可能,绝对和从不)。

我想检查所选单选按钮的所有组框。所以我正在运行For循环来进行检查。

我的问题是,可以做一个如果功能检查"是"所有10个组合框中都选择了单选按钮?

我的For循环肯定会遍历所有10个Group Box。我很高兴。

但是我遇到以下问题:

If (Yes.Checked) And (Yes1.checked) Then
'Do something here
End If

不幸的是,这个代码只有在两个Group Box都有" Yes"单选按钮。

我可以做些什么来检查每个组Box,如果选择了它,添加到变量?

理想情况下,我想要运行5次,而不是50次。

2 个答案:

答案 0 :(得分:0)

我有类似的问题,这就是我解决它的方法:

为每个答案创建特定类型,然后将该类型分配给每个选项。例如,您可以创建包含单选按钮的组,如下所示:

Public Class groupPanel
  Inherits Panel
  Public Sub New()
  End Sub
End Class

然后你会像这样创建变量:

Private group as new groupPanel()

然后,为“是”响应创建一个特定类型,如下所示:

Public Class yesRadioButton
  Inherits System.Windows.Forms.RadioButton
  Public Sub New()
  End Sub
End Class

然后你继续为每个开始做同样的事情(一个用于“否”,一个用于“可能”,依此类推:

Public Class noRadioButton
  Inherits System.Windows.Forms.RadioButton
  Public Sub New()
  End Sub
End Class

然后,在创建组时,将特定类型分配给它们所属的选项。例如:

Private yes_button as new yesRadioButton()
yes_button.parent = groupPanel
Private no_button as new noRadioButton()
no_button.parent = groupPanel

等等

然后你可以简单地遍历组中的每一个并计算有多少。

For each g as control in Main

   If TypeOf g Is groupPanel Then

      For each rb as control in g

         If TypeOf rb is yesRadioButton then

           ' add one to the "yes" counter

         End if

         ElseIf TypeOf rb is noRadioButton then

           ' add one the "no" counter

         End if

         ' and so on until you check all options

      Next

   End if

Next 

然后你将所有内容都包含在一个循环中

答案 1 :(得分:0)

我的解决方案可能与@ user2721815发布的内容非常相似,但实际上却非常不同。我认为创建一个继承树然后遍历控件是没有意义的,因为你之前已经可以这样做了。例如,您可以迭代单选按钮并通过单选按钮文本获得结果。

更好的方法是使用继承在自定义面板类上公开{NotSelected, Yes, No, Maybe, Definitely, and Never}枚举作为属性。创建单选按钮后代并通过属性公开其枚举值。这样,如果选中单选按钮,您就可以确切地知道它对应的枚举值。我将上面的NotSelected选项保留为默认值。请确保每个自定义单选按钮都有一个填充在UI设计器中的值。

下一步 - 处理所有特殊复选框'在自定义面板类的单个处理程序中检查事件,并设置其选定的枚举值(让属性名称为.SelectedOption)。此时您已完成接线工作。

现在,在您的主程序中,在任何给定的时间点,浏览自定义面板并确定哪些具有.SelectedOption = SelectedOptions.Yes。这种方法非常灵活,因为它不会限制您在表单上的许多面板。您也可灵活选择选项 - 某些面板可能没有所有选项,一切都可以正常工作。

如果您需要一些代码来更好地理解这种方法,请随时在下面发表评论。