環境: インターフェイスには TextBox、ComboBox、その他のコントロールがあります。
フォーカスを切り替えるために左右の矢印キーの両方を使用することはお勧めできません。そうしないと、TextBox 内のカーソルの文字位置を変更するのに不便になります。
方法 1: 愚かな方法、コントロールごとに個別にイベント処理を登録する必要があります
TextBox を例に挙げます。コードは次のとおりです:
1 private void textbox_KeyDown(object sender, KeyEventArgs e) 2 { 3 if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter) 4 { 5 e.SuppressKeyPress = true; 6 System.Windows.Forms.SendKeys.Send("{Tab}"); 7 } 8 else if (e.KeyCode == Keys.Up) 9 { 10 e.SuppressKeyPress = true; 11 System.Windows.Forms.SendKeys.Send("+{Tab}"); 12 } 13 }
方法 2: 簡単な方法、登録する必要はありませんコントロールごとに個別にイベントを処理するには、次のコードをフォーム クラスに追加するだけです:
1 //上、下方向键,及回车键切换控件焦点 2 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 3 { 4 Keys key = (keyData & Keys.KeyCode); 5 if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter) 6 { 7 System.Windows.Forms.SendKeys.Send("{Tab}"); 8 return true; 9 } 10 else if (e.KeyCode == Keys.Up) 11 { 12 System.Windows.Forms.SendKeys.Send("+{Tab}");13 return true; 14 } 15 return base.ProcessCmdKey(ref msg, keyData);16 }
この時点で、コントロールのフォーカスを切り替える機能が実装されました。ここで、2 つの ComboBox コントロール cmbMeas が必要になります。フォームインターフェイスの cmbRemark は、フォーカスを切り替えるのではなく、Enter キーを押したときに送信されるようにしたいのですが、どうすればよいですか?次に、現在フォーカスがあるコントロールが cmbMeas か cmbRemark かを判断する必要があります。具体的なコードは次のとおりです。
Control.FromHandle メソッド が戻ります。指定されたハンドル Control に関連付けられた現在のコントロール。指定されたハンドルを持つコントロールが見つからない場合は、null 参照が返されます。Control.FromChildHandle メソッド
複数のハンドルを持つコントロールを返す必要がある場合は、
FromChildHandleメソッドを使用する必要があります。
このメソッドは、コントロールに関連付けられたハンドルが見つかるまで、ウィンドウ ハンドルの親チェーンを検索します。このメソッドは、複数のハンドルを持つコントロールを正しく返すため、FromHandle メソッドよりも信頼性が高くなります。
ユーザー定義コントロールの場合は、FromChildHandle メソッドを使用する必要があります。
以上がC# で矢印キーと Enter キーを使用してコントロール フォーカスを切り替える 2 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。