Как сломать и если еще заявление vb.net - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь, чтобы пользователь выбрал устройство из comboBox и нажал кнопку. Однако, когда они нажимают кнопку ... MessageBox показывает, но также продолжает нажатие кнопки. Как остановить нажатие кнопки, пока пользователь не выберет устройство?

Private Sub EstablishConnection_Click(sender As Object, e As EventArgs) Handles EstablishConnection.Click

        Dim DeviceValidFalg As Boolean = True

        If DeviceDropDownList.Text = "USB" Then
            DeviceName = "USB Adapter"
        ElseIf DeviceDropDownList.Text = "USB1" Then
            DeviceName = "USB HDMI"
        ElseIf DeviceDropDownList.Text = "USB2" Then
            DeviceName = "HGCV"
        ElseIf DeviceDropDownList.Text = String.Empty Then
            DeviceValidFalg = False
            MessageBox.Show("Select a valid device")
        End If


1 Ответ

2 голосов
/ 10 января 2020

Выполните рефакторинг логики c в соответствии с потребностями бизнеса - неправильный ввод должен обрабатываться по-разному.

Например (один из способов сделать это) вы можете заключить два пути в If-Then-Else блок:

Private Sub EstablishConnection_Click(sender As Object, e As EventArgs) Handles EstablishConnection.Click

        Dim DeviceValidFalg As Boolean = True

        If DeviceDropDownList.Text <> String.Empty Then
            Select Case DeviceDropDownList.Text
                Case "USB"
                    DeviceName = "USB Adapter"
                Case "USB1"
                    DeviceName = "USB HDMI"
                Case "USB2"
                    DeviceName = "HGCV"
                Case Else
                    ' Some other code of your choosing here
            End Select
            ' The rest of your logic here
        Else
            DeviceValidFalg = False
            MessageBox.Show("Select a valid device")
        End If

Я предпочитаю Case вместо ElseIf для простых проверок (как у вас здесь), потому что он чище, его легче читать и, следовательно, легче обслуживать.

Другим подходом может быть ранний Exit Sub (как отметил @CoderCharmander в комментариях):

Private Sub EstablishConnection_Click(sender As Object, e As EventArgs) Handles EstablishConnection.Click

        Dim DeviceValidFalg As Boolean = True

        If DeviceDropDownList.Text = String.Empty Then
            DeviceValidFalg = False
            MessageBox.Show("Select a valid device")
            Exit Sub
        End If

        Select Case DeviceDropDownList.Text
            Case "USB"
                DeviceName = "USB Adapter"
            Case "USB1"
                DeviceName = "USB HDMI"
            Case "USB2"
                DeviceName = "HGCV"
            Case Else
                ' Some other code of your choosing here
        End Select
        ' The rest of your logic here

Лучший рефакторинг - убедиться, что они не могут нажать кнопку (отключить ее) до у них есть действительный вклад! То есть, активируйте кнопку на основе значений различных элементов управления пользовательским вводом.

Приложение (из @ JohnPete22 в комментариях):

If Not String.IsNullOrWhiteSpace(DeviceDropDownList.Text) вместо DeviceDropDownList.Text <> String.Empty лучше использует конструкцию VB. Net String и учитывает случай, когда строка не является Trim med от ввода. Конечно, удалите Not для = во втором примере.

...