Нажатие окна сообщения vb.net ведет себя по-другому, чтобы ввести ключ - PullRequest
0 голосов
/ 09 мая 2018

Чистые гуру

У меня есть следующий фрагмент кода.Если я щелкаю мышью по кнопке ОК в окне сообщения, код работает правильно, но если я нажимаю клавишу ввода, он возвращает фокус в txtusename, но затем переходит в txtpassword.Есть идеи почему?

Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
    If String.IsNullOrEmpty(txtUserName.Text) Then
        Dim msgResult As DialogResult = MessageBox.Show("User Name required", "Invalid Entry", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        If msgResult = DialogResult.OK Then
            txtUserName.Focus()
        End If
        Return

    ElseIf String.IsNullOrEmpty(txtPassword.Text) Then
        Dim msgResult As DialogResult = MessageBox.Show("Password required", "Invalid Entry", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        'MsgBox("Password required", vbOKOnly, vbExclamation)
        txtUserName.Select()
        txtPassword.Select()

        Return
    End If

1 Ответ

0 голосов
/ 09 мая 2018

Если в txtUserName есть значение, а txtPassword равно нулю или пусто, вы показываете MessageBox. После отображения MessageBox (независимо от выбранного пользователя) вы выбираете txtUserName и txtPassword. Поскольку вы можете выбрать только один TextBox, окончательно будет выбран txtPassword.

На Form сначала выбирается txtUserName, поэтому курсор переходит с txtPassword на txtUserName. В конце выбирается txtPassword, поэтому курсор переходит с txtUserName на txtPassword.

Вы также используете .Select в части ElseIf. Если вы хотите установить курсор на TextBox, вам нужно использовать .Focus (как в части If).

Вам нужно удалить txtUserName.Select() на ElseIf и использовать .Focus вместо .Select на txtPassword для решения вашей проблемы:

Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
    If String.IsNullOrEmpty(txtUserName.Text) Then
        MessageBox.Show("User Name required", "Invalid Entry", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        txtUserName.Focus()
        Return
    ElseIf String.IsNullOrEmpty(txtPassword.Text) Then
        MessageBox.Show("Password required", "Invalid Entry", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        txtPassword.Focus()
        Return
    End If

    'more code for database connection.
End Sub
...