Так что я нахожусь в интернатуре для школы, которая заставляет меня кодировать программу с помощью VB.NET. Одна из форм имеет три комбинированных блока, которые должны иметь выбор, выбранный в каждом, прежде чем двигаться дальше. Если пользователь пропустил одно из списков combobox, я пытаюсь привлечь его к себе, чтобы вернуться и сделать выбор, прежде чем продолжить. У меня есть, если заявление, которое работает точно, как я хочу, чтобы:Более эффективная ошибка ловли?
If cboYear.SelectedIndex = -1 Then
warningString = warningString + "Year" & vbNewLine & "Vendor" & vbNewLine & "Report"
txtYear.ForeColor = Color.Red
TextBox7.ForeColor = Color.Red
txtReport.ForeColor = Color.Red
MessageBox.Show(warningString)
ElseIf cboVendorName.SelectedIndex = -1 Then
warningString = warningString + "Vendor" + vbNewLine & "Report"
txtYear.ForeColor = Color.Black
TextBox7.ForeColor = Color.Red
txtReport.ForeColor = Color.Red
MessageBox.Show(warningString)
ElseIf cboReport.SelectedIndex = -1 Then
warningString = warningString + "Report" & vbNewLine
txtYear.ForeColor = Color.Black
TextBox7.ForeColor = Color.Black
txtReport.ForeColor = Color.Red
MessageBox.Show(warningString)
Else
Main.Show()
Me.Hide()
End If
(warningString является родовой строкой, которая говорит что-то вроде «Пожалуйста, заполните следующее:»)
Так как я сказал это работает именно так, как я этого хочу, и его довольно легко следовать моей логике здесь. Мой вопрос: как я могу сделать этот код более эффективным? Я попробовал массивы для выбора выделенных ячеек, и я попробовал цикл for и select case, чтобы попытаться упорядочить код безрезультатно. Массив всегда выходит из строя и возвращает исключение NullReferenceException, прежде чем он попадает в мой цикл Select Case или For, чтобы узнать, есть ли значение в выпадающем списке или нет.
Если есть кто-то, кто может помочь мне пройти через логику получения какой-то петли для работы над этим, это было бы потрясающе. Я не прошу рабочий код или что-то в этом роде, однако, если есть решение, которое можно найти, и я сам туда доберусь, я отправлю его здесь для будущих ссылок для людей. Кто знает, это может быть даже самым эффективным способом?
Редактировать: Plutonix был достаточно любезен, чтобы предложить некоторые комментарии по моему вопросу, и он поднял точку зрения о том, что утверждения if не являются взаимоисключающими. Это связано с тем, что сборники заполняются наборами данных, и каждое CBO в порядке определяет, какая информация из наборов данных будет заполнять следующую. Таким образом, в зависимости от того, какой год выбран в поле «Год», определяет, какие поставщики заполняют комбобокс «Vendor» и определяет, какие отчеты заполняются в поле «Отчет».
VB6 не имеет 'NullReferenceException', вы уверены, что вы не используете VB.NET – Plutonix
Нет, это точно vb6, я просто попробовал запустить Select Case, и вот что мне рассказала Visual Studio: Необработанный тип исключения 'System .NullReferenceException 'произошло в ETL.exe ****** Дополнительная информация: Ссылка на объект не установлена в экземпляр объекта. – TGautier
Это массив объектов, который хранится, например: errorArray (0) = cboYear.SelectedIndex, а затем тестовое выражение Select Case равно -1 – TGautier