如何要求在另一个窗体显示之前至少选中一个复选框 (Visual Basic 2010)

How can I require at least one checkbox be checked before another form show (Visual Basic 2010)

提问人:Yuta Ruitzu 提问时间:3/9/2023 最后编辑:starballYuta Ruitzu 更新时间:3/15/2023 访问量:212

问:

在我的 Form1 中,我有 5 个复选框、1 个列表框和 2 个按钮。1 个按钮(全选)用于选中所有 5 个复选框,1(继续按钮)用于继续下一个表单,即 Form2。我在此表单中的主要目标是当用户填写所有要求并按下继续按钮时,他/她将继续进入下一个表单(Form2),但是当缺少一个表单时,将出现一个消息框,指出缺少其中一个字段。用户可以单击这些复选框中的任何一个,通过选择全选按钮,将选中所有复选框,但是当他继续按下继续按钮而不选中任何这些复选框时,将出现相同的消息框,通知未选中任何复选框。

我尝试了这段代码,但它需要选中所有 5 个复选框,然后才能进入下一个表单。

firelevel 是列表框 Station1BTN 到 Station5BTN 是复选框

If firelevel.Text = String.Empty 
    Or station1btn.Checked = False 
    Or station2btn.Checked = False 
    Or station3btn.Checked = False 
    Or station4btn.Checked = False 
    Or station5btn.Checked = False Then
        MsgBox("MISSING: Please fill all the field to complete your report", 
            MsgBoxStyle.Exclamation, "REPORT UNSUCESSFUL")


Else
    Me.Hide()
    CONFIRMFORM.Show()
    My.Settings.Save()

我已经尝试将 更改为 ,但即使列表框为空或所有 5 个都未选中,它也会继续前进。OrAnd

.net vb.net oop visual-studio-2010

评论

0赞 Rufus L 3/9/2023
如果您试图确保它们都没有值,则应使用 AND 而不是 Or。有关详细信息,请阅读链接。

答:

0赞 BitWiseByteDumb 3/9/2023 #1

不确定您使用的是什么语言,但您可以简单地将 if 语句中的逻辑更改为 AND so

If cb1 is notchecked (AND/&&) cb2 is notchecked (AND/&&) cb3 is notchecked (AND/&&) cb4 is notchecked (AND/&&) cb5 is notchecked

如果没有勾选任何 chackbox,这将阻止表单前进!如果是,那么如果会失败!

0赞 Rufus L 3/9/2023 #2

为了确保至少选中一个复选框,我们需要使用运算符。按照你的编写方式,如果未选中任何复选框,它就会返回,而我们希望它未选中所有复选框时返回。AndTrueTrue

我们可以将复选框验证括在括号中,以强制这些比较返回单个复选框或复选框,并且我们可以通过文本框验证来获得结果:TrueFalseOrText

If firelevel.Text = String.Empty 
    Or (station1btn.Checked = False 
    And station2btn.Checked = False 
    And station3btn.Checked = False 
    And station4btn.Checked = False 
    And station5btn.Checked = False)
Then
    MsgBox("MISSING: Please fill all the field to complete your report", 
            MsgBoxStyle.Exclamation, "REPORT UNSUCESSFUL")
Else
    Me.Hide()
    CONFIRMFORM.Show()
    My.Settings.Save()

您可以在这些链接中阅读有关 AndOr 运算符的更多信息。

0赞 ENERGY.SERVICES 3/9/2023 #3

您可以尝试为每个复选框添加值,并且仅在值为 2 时才加入 Form5,我的意思是......

public class Program
{
    public int CheckBox_Status = 0; 
    public static void Main()
    {
        Console.WriteLine("Hello World");
    }
    ///
    ///Do this to all your CheckBOX'S increment by one for example
    ///
    public void CheckBox1_OnClick()
    {
        CheckBox_Status += 1;
    }
    ///
    ///The in your code when you evaluate all your conditions filled correctly
    ///you give access
    public void Open_Form2()
    {
        if(CheckBox_Status==5)
        {
            Form2.Show();
        }
        else
        {
            messagebox.show("Check your data something is missing!");
        }
    }
}

评论

0赞 Yuta Ruitzu 3/9/2023
感谢您的评论先生,但我使用的是 Visual Basic 2010。每个复选框都有字符串值,选中该值后,下一个窗体中的标签将被复选框的字符串值替换
0赞 Anant Anand Gupta 3/15/2023 #4

您应该使用包含复选框的分组框,这将使复选框的迭代变得容易。完成后,您可以通过遍历它们来找出选中的项目。请在此处查看答案。

0赞 Idle_Mind 3/15/2023 #5

这是另一种使用 Array 来保存 CheckBox 的方法。这允许我们使用 LINQ 查询来确定是否所有查询都未选中:

Dim cbs() As CheckBox = {station1btn, station2btn, station3btn, station4btn, station5btn}
Dim noneSelected As Boolean = cbs.All(Function(x) Not x.Checked)
If firelevel.Text.Trim = String.Empty OrElse noneSelected Then
    MsgBox("MISSING: Please fill all the field to complete your report",
    MsgBoxStyle.Exclamation, "REPORT UNSUCESSFUL")
Else
    ' ... do something in here ...
End If