Прервать перемещение записи или сохранение, если ТБ пуст
Я постараюсь быть как можно более ясным.
У меня есть много текстовых полей (tb) в моей форме, которые заполняются импортом CSV-файла. Перед тем как запись может быть сохранена любым способом (нажатие кнопки Сохранить, переход к другой записи, добавление новой записи, закрытие программы) Я пытаюсь обеспечить заполнение конкретных полей ТБ.
У меня есть "грязная" команда (код ниже), чтобы отметить, если что-то изменится в записи, и если да, то попросит пользователя сохранить или отменить сохранение перед переходом к следующей записи (будь то вперед или назад, добавление новой записи или закрытие программы). "Грязный" вызывается независимо от того, какой метод использует пользователь для перехода к другой записи, добавления записи или просто пытается закрыть программу без сохранения.
С измененным" грязным " кодом ниже он проверяет и запрашивает меня, если в текстовом поле отсутствуют данные... но как только пользователь нажимает кнопку ОК, он продолжает спрашивать, хочу ли я сохранить запись (даже если я отменю сохранение), а затем переходит к запрошенной записи или добавляет, что бы я ни выбрал во время тестирования.
Я хочу, чтобы программа остановилась там и оставалась на записи до тех пор, пока пользователь не исправит "ошибку". чем запускает грязную и перемещает, добавляет запись или закрывает программу, предполагая, что никакие другие необходимые ТБ не являются нулевыми/пустыми.
Пример моего кода импорта выглядит следующим образом:
tbCarrierLoadNumber.Text = MyList.Items.Item(288).ToString
Мой импорт работает нормально. Я думал, что смогу разместить следующее (заменив ту же строку импорта выше), но это, похоже, тоже не работает, давая ошибки до того, как форма даже загрузится:
If (String.IsNullOrEmpty(tbCarrierLoadNumber.Text)) Then MsgBox("Carrier Load Number is Required." & vbNewLine & "Please Correct.", MsgBoxStyle.Exclamation, "OVERSIGHT ERROR") else tbCarrierLoadNumber.Text = MyList.Items.Item(288).ToString end if
Если я правильно понимаю, что он проверяет флажок перед импортом, так что, очевидно, msgbox появится перед импортом. Мне нужно, чтобы это произошло после импорта и до или во время "грязного" события, и я не знаю, как это сделать.
Поскольку это, по-видимому, не работает, я вернулся к своей первоначальной строке импорта и изменил свой "грязный" код следующим образом (Пожалуйста, смотрите дополнительную информацию в конце грязного кода):
Что я уже пробовал:
Private Sub Dirty() If Not LoadForm Then Cursor = Cursors.WaitCursor If (String.IsNullOrEmpty(dpDispatchDate.Text)) Then MsgBox("Dispatch Date cannot by blank." & vbNewLine & "Please Correct.", MsgBoxStyle.Critical, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tbCarrierLoadNumber.Text)) Then MsgBox("Carrier Load Number is Required." & vbNewLine & "Please Correct.", MsgBoxStyle.Exclamation, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tb01Time.Text)) Then MsgBox("01 Pickup Date/Time cannot by blank." & vbNewLine & "Please Correct.", MsgBoxStyle.Critical, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tb90Time.Text)) Then MsgBox("90 Pickup Date/Time cannot by blank." & vbNewLine & "Please Correct.", MsgBoxStyle.Critical, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tbShipCode.Text)) Then MsgBox("A Shipper Code is Required - Cannot by blank." & vbNewLine & "PPlease Correct.", MsgBoxStyle.Exclamation, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tbRcvrCode.Text)) Then MsgBox("A Receiver Code is Required - Cannot by blank." & vbNewLine & "Please Correct.", MsgBoxStyle.Exclamation, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tbLinehaulToTruck.Text)) Then MsgBox("Linehaul to Truck cannot by blank." & vbNewLine & "Please Correct.", MsgBoxStyle.Critical, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tbLinehaulToFax.Text)) Then MsgBox("Linehaul to Fax cannot by blank." & vbNewLine & "Please Correct.", MsgBoxStyle.Critical, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tbNumPU.Text)) Then MsgBox("Number of Pickups cannot by blank." & vbNewLine & "Please Enter Number of Pickups.", MsgBoxStyle.Exclamation, "OVERSIGHT ERROR") Return End If If (String.IsNullOrEmpty(tbNumbDrops.Text)) Then MsgBox("Number of Drops cannot by blank." & vbNewLine & "Please Enter Number of Drops.", MsgBoxStyle.Exclamation, "OVERSIGHT ERROR") Return End If Validate() LoadInfoDataSetBindingSource.EndEdit() If LoadInfoDataSet.HasChanges Then MeMsgBoxSaveChanges.ShowDialog() If MeMsgBoxSaveChanges.Result = "Yes" Then btnSaveNav.PerformClick() Else LoadInfoDataSet.RejectChanges() End If End If Cursor = Cursors.Default End If End Sub
Я также попытался заменить вышеприведенное "return "на" exit sub " без каких-либо изменений в поведении.