Вы можете сделать все это в одном выражении 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)
Кроме того, в качестве личного совета. Если пользователь допустил ошибку, не введя все ожидаемое, пожалуйста, не используйте привычку расчищать всю свою работу, чтобы исправить проблему. Ваш блок кода сообщает пользователю, что они перепутались, а затем вы переходите и все возвращаете в пустые значения.
Удалить «ElseIf». Каждое условие должно быть в его собственном 'If' – Pikoh
У вас есть ошибки? Логика в строке 1 не имеет для меня никакого смысла. –
В качестве стороннего варианта часто используются радиообъективы в режиме разработки, поэтому по умолчанию проверяется один из них. – peterG