2009-06-13 8 views
1

こんにちは、私は、特定のフォームに多数のテキストボックスが移入されたC#winformアプリケーションを持っています。私は右の矢印キーを押すことによって、これはタブキーを押すのと同じベアビオを模倣するようにしたいと思います。私は本当にこれを行う方法はわかりません。C#Winform Alter Sent Keystroke

私はタブキーの操作を変更したくありません。ちょうどそのフォーム上で同じことをするための右矢印キーを取得します。

誰もが提案を提供できますか?

答えて

2

...

protected override void OnKeyUp(KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Right) 
    { 
     Control activeControl = this.ActiveControl; 

     if(activeControl == null) 
     { 
      activeControl = this; 
     } 

     this.SelectNextControl(activeControl, true, true, true, true); 
     e.Handled = true; 
    } 

    base.OnKeyUp(e); 
} 
+0

こんにちはブライアン、これは正常に動作するようだが、それは、それが存在するコンテナ上のコントロールを介してのみ反復する - 例えば、グループボックス。だから私は3つのグループボックスを持っている場合、それはタブキーのように次のものに飛び越えるつもりはありません –

+0

私はコンテナで再帰的に動作すると思うSelectNextを使用するようにそれを更新します。 –

0

私は、これはあなたが求めているものを達成すると思います:

private void form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Right) 
    { 
     Control activeControl = form1.ActiveControl; 
     // may need to check for null activeControl 
     form1.SelectNextControl(activeControl, true, true, true, true); 
    } 
} 
0

をあなたが好きなアクションを実行後、トラップに、フォーム上のキーストロークをKeyDownイベントを使用することができます。例:

private void MyForm_KeyDown(object sender, KeyEventArgs e) 
{ 
    if(e.KeyCode == Keys.Right) 
    { 
     this.SelectNextControl(....); 
     e.Handled = true; 
    } 
} 

フォームのKeyPreviewプロパティをTrueに設定することを忘れないでください。あなたがこれを行うには、フォームでOnKeyUpをメソッドをオーバーライドする必要があり

+0

私が代わりにイベントを使用する方法をオーバーライドします。また、私はKeyDownでそれをやっていません。キーダウンと実際のキーの押下を確認してください。 –