如何确保用户不会未选择任何多项选择输入?

时间:2017-02-03 08:42:40

标签: vb.net if-statement variable-assignment messagebox

我正在尝试建立一个酒店结算系统,其中用户不能离开组合框,单选按钮和未选中的列表框,我想出了什么可以有人帮我这个?

-newbie

Dim inp As Integer = 0

    If RadioButton1.Checked Or RadioButton2.Checked Or RadioButton3.Checked = False Then
        inp = 1
    End If
    If ComboBox1.Text = "" Then
        inp = 1
    End If
    If ListBox1.SelectedIndex() Then
        inp = 1
    End If
    If inp = 1 Then
        MessageBox.Show("No selected type of payment" & vbCrLf & "Or" & vbCrLf & "No selected room capacity" & vbCrLf & "Or" & vbCrLf & "No selected room type", "Error")
        inp = 0
    End If

2 个答案:

答案 0 :(得分:3)

你可以在一个if语句中完成所有这些操作,你只需要根据它的价值检查每一个。

If (RadioButton1.Checked = False AndAlso RadioButton2.Checked = False AndAlso RadioButton3.Checked = False) OrElse Combobox1.SelectedIndex = -1 OrElse ListBox1.SelectedIndex = -1 Then
    MessageBox.Show("No selected type of payment" & vbCrLf & "Or" & vbCrLf & "No selected room capacity" & vbCrLf & "Or" & vbCrLf & "No selected room type", "Error")
Exit Sub
End If

一旦发现任何条件成立,使用OrElse将继续。如果发生这种情况,我们可以立即进入If块并显示消息。此时,继续执行其余例程没有任何意义,因此我们退出子,允许用户修复丢失的信息并重试。

话虽如此,您的原始代码中存在多个问题。一个是你的第一行不做你认为它做的事情。 (根据它的价值检查每个条件)。另一个原因是你没有检查列表框中的任何选择索引。

查找布尔值,因为你可以使用它来代替int来处理你的inp标志。

你也有inp = inp = 1,我认为你想要从这两种情况中减去1,在这种情况下,你可以把它设置回0(参见我的布尔注释,它会通过允许你来处理它将其设置为true或false)

另外,作为个人提示。如果用户因未输入所有预期而犯了错误,请不要养成为解决问题而清除所有工作的习惯。您的代码块告诉用户他们搞砸了,然后您将所有内容设置回空白值。

答案 1 :(得分:0)

检查您的代码:

RadioButton2.Checked Or RadioButton2.Checked = False将始终生成inp=1

<强>更新

If RadioButton1.Checked = False Or RadioButton2.Checked = False Or RadioButton3.Checked = False Then
    inp=1
End If
If ComboBox1.Text = "" Then
    inp=1
End If
If ListBox.SelectedItem = -1 Then
    inp = 1
End If
If inp = 1 Then
    MessageBox.Show("No selected type of payment" & vbCrLf & "Or" & vbCrLf & "No selected room capacity" & vbCrLf & "Or" & vbCrLf & "No selected room type", "Error")
    inp = 0
    RadioButton1.Checked = False
    RadioButton2.Checked = False
    RadioButton3.Checked = False
    ListBox1.ClearSelected()
    ComboBox1.Text = ""
End If