У меня есть основное приложение winforms с двумя кнопками «btn_OK», «btn_cancel» и «Textbox1». Вот мой код:Почему winforms textbox украл фокус
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.KeyPreview = True
btn_cancel.TabIndex = 0
btn_OK.TabIndex = 1
TextBox1.TabIndex = 2
TextBox1.TabStop = False
TextBox1.Multiline = True
TextBox1.Text = "Quick brown fox say's hello world."
btn_cancel.Focus()
End Sub
Private Sub btn_cancel_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles btn_cancel.KeyDown
If e.KeyCode = Keys.Left Then
btn_OK.Focus()
End If
End Sub
Private Sub btn_OK_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles btn_OK.KeyDown
If e.KeyCode = Keys.Right Then
btn_cancel.Focus()
End If
End Sub
End Class
Идея заполнить текстовое поле с текстом, установите фокус на btn_cancel и с нажатием на keys.Left перемещения фокуса на btn_OK. Но этого не происходит.
При нажатии левой клавиши фокус переходит в текстовое поле вместо btn_OK, даже если для свойства TabStop в текстовом поле установлено значение false!
Это очень неожиданно и нежелательно.
Что здесь происходит и как получить ожидаемую функциональность?
Клавиши Tab и курсора перехватываются, прежде чем они смогут достигнуть элемента управления с помощью фокуса. Winforms использует их для автоматического обслуживания. Таким образом, обработчики событий KeyDown никогда не запускаются и свойства TabIndex, которые вы установили, находятся под контролем. Вместо этого замените ProcessCmdKey(). –
Спасибо, Ганс, я попробую. –