Поймать [Tab] или [Enter] по событию KeyPress - PullRequest
0 голосов
/ 26 октября 2018

Можно ли перехватить клавишу Enter или Tab в событии KeyPress?

Я ввожу только числовое значение в поле со списком, но как только это значение будет проверено, я хочу, чтобы пользователь могПосле подтверждения нажмите Tab или Enter из CB, возможно ли это из-за нажатия клавиши?Вот мой код:

Private Sub cbCheckAmount_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cbCheckAmount.KeyPress
    'Only allowed characters
    Dim allowedChars As String = "0123456789."

    If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
        If e.KeyChar <> ControlChars.Back Then
            If allowedChars.IndexOf(e.KeyChar) = -1 Then
                ' Invalid Character, notify clear and return
                nonNumberEntered = True    'Set to True to 'swallow' the keypress and prevent the TextChanged event from firing.
                MsgBox("Numbers only", MsgBoxStyle.Exclamation)
                cbCheckAmount.Text = ""
                cbCheckAmount.Focus()
                cbDollarAmount.Text = ""
            End If
        End If
    End If
    'If shift key was pressed, it's not a number.
    If Control.ModifierKeys = Keys.Shift Then
        nonNumberEntered = True
        cbCheckAmount.Text = ""
        cbCheckAmount.Focus()
    End If

End Sub
Private Sub cbCheckAmount_TextChanged(sender As Object, e As EventArgs) Handles cbCheckAmount.TextChanged
    'Call the function to create a text line out of the numbers
    'Regex to ensure the string contains numbers
    Dim t As ComboBox = sender
    Dim foo As Decimal
    If Decimal.TryParse(cbCheckAmount.Text, foo) Then
        'data is good
        Dim re As New Text.RegularExpressions.Regex("\d")
        If re.IsMatch(cbCheckAmount.Text) Then
            If nonNumberEntered = False Then
                Dim newNum = cbCheckAmount.Text.Trim
                'If there are any leading weird . in the string
                newNum = newNum.TrimStart(".")
                Dim newStr As String
                'Build the array
                Dim newDec As String() = newNum.Split(New Char() {"."c})
                If newNum.Contains(".") Then
                    newStr = NumberToText(newDec(0))
                    cbDollarAmount.Text = newStr & " Dollars and " & newDec(1) & "/100 "
                Else
                    newStr = NumberToText(newDec(0))
                    cbDollarAmount.Text = newStr & " Dollars and 00/100 "
                End If

            End If
        End If
    Else
        'data is bad
        nonNumberEntered = False
        cbCheckAmount.Text = ""
        cbCheckAmount.Focus()
        cbDollarAmount.Text = ""
    End If

End Sub

Я использую VB 2015

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Если я правильно понимаю, не то, что вы хотите, просто

 If e.KeyChar = ChrW(Keys.Return) or e.KeyChar = Keys.Tab Then
        ''somethign something''
 End If
0 голосов
/ 26 октября 2018

Остановись и послушай. Проблема, которую вы пытаетесь решить, не существует. Просто сделай это правильно в первую очередь. Обработайте событие Validating каждого элемента управления и проведите там проверку. Если проверка не пройдена, установите e.Cancel на True, и элемент управления сохранит фокус. В обработчике событий Click вашего OK Button или чего-либо еще вызовите метод ValidateChildren, и это вызовет событие Validating для каждого элемента управления, даже если он никогда не получал фокус. Если какой-либо элемент управления не прошел проверку, ValidateChildren возвращает False, и вы знаете, что не пытаетесь использовать данные. Э.Г.

Private Sub TextBox1_Validating(sender As Object, e As CancelEventArgs) Handles TextBox1.Validating
    Dim value = TextBox1.Text.Trim()

    'Data is optional but must be numeric if provided.
    If value <> String.Empty AndAlso Not Double.TryParse(value, Nothing) Then
        TextBox1.SelectAll()
        TextBox1.HideSelection = False

        MessageBox.Show("If data is provided, it must be numeric", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Error)

        TextBox1.HideSelection = True
        e.Cancel = True
    End If
End Sub

Private Sub TextBox2_Validating(sender As Object, e As CancelEventArgs) Handles TextBox2.Validating
    'Data is required.
    If TextBox2.Text.Trim() = String.Empty Then
        TextBox2.SelectAll()
        TextBox2.HideSelection = False

        MessageBox.Show("Data must be provided", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Error)

        TextBox2.HideSelection = True
        e.Cancel = True
    End If
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If ValidateChildren() Then
        'The data has passed validation so it is safe to use it.
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...