2017-02-03 9 views
0

Я пытаюсь сделать систему биллинга отеля, в которой пользователь не может оставлять поля со списком, переключатели и списки, которые не выбраны, и я не в курсе, может ли кто-нибудь помочь мне с этим?Как я могу гарантировать, что пользователь не оставляет выбранных входов с несколькими вариантами выбора?

-newbie

Dim вх 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 
+1

Удалить «ElseIf». Каждое условие должно быть в его собственном 'If' – Pikoh

+1

У вас есть ошибки? Логика в строке 1 не имеет для меня никакого смысла. –

+0

В качестве стороннего варианта часто используются радиообъективы в режиме разработки, поэтому по умолчанию проверяется один из них. – peterG

ответ

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 и отобразить сообщение. На данный момент нет смысла продолжать работу с остальной частью процедуры, поэтому мы выходим из подпрограммы, позволяя пользователю исправить недостающую информацию и повторить попытку.

Это, как говорится, у вас есть несколько проблем в вашем исходном коде. Во-первых, ваша первая линия не делает то, что вы думаете, что она делает. (проверьте каждое условие на его значение). Другим является то, что вы не проверяете выбранный индекс listbox на что-либо.

Посмотрите булевы, как вы могли бы использовать это вместо int, чтобы обрабатывать ваш флаг inp.

У вас также есть inp = inp = 1, который, я думаю, вы хотели бы вычесть 1 из, в любом случае, в этой ситуации, вы могли бы просто вернуть его обратно в 0 (см. Мой логический комментарий, он справится с этим, разрешив вы установите его на значение true или false)

Кроме того, в качестве личного совета. Если пользователь допустил ошибку, не введя все ожидаемое, пожалуйста, не используйте привычку расчищать всю свою работу, чтобы исправить проблему. Ваш блок кода сообщает пользователю, что они перепутались, а затем вы переходите и все возвращаете в пустые значения.

+0

Lol спасибо за этот комментарий, ваш код исправил мою проблему. Благодарю вас, сэр. : D –

0

Проверьте код:

RadioButton2.Checked Or RadioButton2.Checked = False всегда будет приводить к inp=1

UPDATE

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 
+0

Я изменил его, но все-таки он не работает, он продолжает показывать окно сообщений, хотя я проверил radobutton –