WPFアプリケーションには、多くのフィールドがあるウィンドウがあります。ユーザーが各フィールドに入力した後にTabキーを使用すると、Windowsは次のフィールドに移動することを認識します。これはかなり既知の動作です。
ここで私がやりたいのは、実際にはRETURNがヒットしたときに、Tabキーをシミュレートすることです。したがって、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);
}
}
このようにして、フォーカスは次に見つけることができる場所に移動します:)
ここで投稿を見ることができます: 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);
}
}
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;
}
TABをシミュレートするためにそれを使用する必要があると思います:
SendKeys.Send("{TAB}");
の代わりに
e.Key = Key.Tab
ソース: http://msdn.Microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx
フォームのメソッドSelectNextControlを使用します
SendKeysクラスをWinforms.SendKeysのように機能させるのはどうですか
public static class SendKeys
{
public static void Send(Key key)
{
if (Keyboard.PrimaryDevice != null) {
if (Keyboard.PrimaryDevice.ActiveSource != null) {
var e1 = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, key) { RoutedEvent = Keyboard.KeyDownEvent };
InputManager.Current.ProcessInput(e1);
}
}
}
}
最善の解決策は次のとおりです。
var ue = e.OriginalSource as FrameworkElement;
if (e.Key == Key.Return)
{
e.Handled = true;
ue.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
SendKeys.SendまたはSendKeys.SendWaitはWPFアプリケーションでは機能しないため、元の質問に答えてください
if (e.Key == Key.Return)
{
KeyEventArgs tabPressEventArgs = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent };
InputManager.Current.ProcessInput(tabPressEventArgs);
}