Как имитировать нажатие клавиши Tab при нажатии Return в приложении WPF?
В приложении WPF у меня есть окно с большим количеством полей.
Когда пользователь использует клавишу TAB после заполнения каждого поля, окна понимают, что он переходит к следующему. Это довольно знакомое поведение.
Теперь я хочу, чтобы он имитировал ключ TAB, когда на самом деле RETURN попадает.
Итак, в моем WPF-xaml я добавил, что KeyDown="userPressEnter"
И в коде позади него:
private void userPressEnter(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
e.Key = Key.Tab // THIS IS NOT WORKING
}
}
Теперь, очевидно, это не работает. Но я не знаю, как я делаю эту работу?
РЕДАКТИРОВАТЬ 1 == > НАЙДЕННОЕ РЕШЕНИЕ
Я нашел кое-что, что помогло мне =)
private void userPressEnter(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
MoveFocus(request);
}
}
Таким образом, Фокус перемещается по следующему, который он может найти:)
Ответы
Ответ 1
Вы можете посмотреть сообщение здесь:
http://social.msdn.microsoft.com/Forums/en/wpf/thread/c85892ca-08e3-40ca-ae9f-23396df6f3bd
Вот пример:
private void textBox1_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
request.Wrapped = true;
((TextBox)sender).MoveFocus(request);
}
}
Ответ 2
protected override bool ProcessDialogKey(Keys keyData)
{
System.Diagnostics.Debug.WriteLine(keyData.ToString());
switch (keyData)
{
case Keys.Enter:
SendKeys.Send("{TAB}");
break;
}
base.ProcessDialogKey(keyData);
return false;
}
Ответ 3
Я думаю, вы должны использовать это для моделирования TAB:
SendKeys.Send("{TAB}");
Вместо
e.Key = Key.Tab
Источники: http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx
Ответ 4
Использовать метод SelectNextControl вашей формы