2013-12-03 4 views
-1

У меня есть основное приложение 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!

Это очень неожиданно и нежелательно.
Что здесь происходит и как получить ожидаемую функциональность?

+2

Клавиши Tab и курсора перехватываются, прежде чем они смогут достигнуть элемента управления с помощью фокуса. Winforms использует их для автоматического обслуживания. Таким образом, обработчики событий KeyDown никогда не запускаются и свойства TabIndex, которые вы установили, находятся под контролем. Вместо этого замените ProcessCmdKey(). –

+0

Спасибо, Ганс, я попробую. –

ответ

0

Это необязательно, перестаньте пробовать этот путь и определите свои пользовательские позиции вкладок с помощью страницы TabOrder из меню опций Visual Studio.

Вид> TabOrder

enter image description here

В данном примере первая кнопка сосредоточена в "0", если нажать правую кнопку она будет направлена ​​"1", если я нажимаю влево, то он будет фокусировать «0», и так далее.

+0

Это не вопрос, так что это тоже не ответ. –

Смежные вопросы