提问人:Yuta Ruitzu 提问时间:3/9/2023 最后编辑:starballYuta Ruitzu 更新时间:3/15/2023 访问量:212
如何要求在另一个窗体显示之前至少选中一个复选框 (Visual Basic 2010)
How can I require at least one checkbox be checked before another form show (Visual Basic 2010)
问:
在我的 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 个都未选中,它也会继续前进。Or
And
答:
不确定您使用的是什么语言,但您可以简单地将 if 语句中的逻辑更改为 AND so
If cb1 is notchecked (AND/&&) cb2 is notchecked (AND/&&) cb3 is notchecked (AND/&&) cb4 is notchecked (AND/&&) cb5 is notchecked
如果没有勾选任何 chackbox,这将阻止表单前进!如果是,那么如果会失败!
为了确保至少选中一个复选框,我们需要使用运算符。按照你的编写方式,如果未选中任何复选框,它就会返回,而我们希望它未选中所有复选框时返回。And
True
True
我们可以将复选框验证括在括号中,以强制这些比较返回单个复选框或复选框,并且我们可以通过文本框验证来获得结果:True
False
Or
Text
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()
您可以在这些链接中阅读有关 And
和 Or
运算符的更多信息。
您可以尝试为每个复选框添加值,并且仅在值为 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!");
}
}
}
评论
您应该使用包含复选框的分组框,这将使复选框的迭代变得容易。完成后,您可以通过遍历它们来找出选中的项目。请在此处查看答案。
这是另一种使用 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
评论
AND
而不是Or
。有关详细信息,请阅读链接。