4

フォーム例

winform アプリケーションに配置するカスタム数字キーパッド コントロールを作成しました。すべてのボタンにはOnClick、カスタム コントロールを配置したフォーム内のフォーカスされたテキスト ボックスに値を送信するイベントがあります。このような:

private void btnNum1_Click(object sender, EventArgs e)
{
    if (focusedCtrl != null && focusedCtrl is TextBox)
    {
        focusedCtrl.Focus();
        SendKeys.Send("1");
    }
}

focusedCtrlMouseDown次のようにボタンのイベントに設定する必要があります。

private void btnNum1_MouseDown(object sender, EventArgs e)
{
    focusedCtrl = this.ActiveControl;
}

wherethis.ActiveControlは、フォーム上のアクティブなコントロールを表します。

私の問題は、イベントがフォーカスされたコントロールが以前に何であったかを検出する前に、ボタンが常にフォーカスを受け取ることです。ボタンがフォーカスされる前にどのコントロールにフォーカスがあったかを検出するにはどうすればよいですか? 使用すべき別のイベントはありますか? 前もって感謝します!

編集:また、GotFocusフォームの各テキストボックスでイベントを使用して設定するのfocusedCtrlは面倒な場合があり、カスタムコントロールのすべてのコーディングをフォームではなくコントロール自体に配置したいため、設定したくありません配置されます。(ただし、私が求めていることを行うための実際的な方法が他にない場合は、これを行います)

4

4 に答える 4

2
Control focusedCtrl;
//Enter event handler for all your TextBoxes
private void TextBoxesEnter(object sender, EventArgs e){
    focusedCtrl = sender as TextBox;
}
//Click event handler for your btnNum1
private void btnNum1_Click(object sender, EventArgs e)
{
  if (focusedCtrl != null){
    focusedCtrl.Focus();
    SendKeys.Send("1");
  }
}
于 2013-08-26T13:32:02.830 に答える
2

使用できるlostFocusというイベントがあります

button1.LostFocus +=new EventHandler(dataGridView1_LostFocus);

そしてイベントで:

   Control lastFocused;

  void dataGridView1_LostFocus(object sender, EventArgs e)
  {
     lastFocused = sender as Control;
  }

そのようにして、以前にフォーカスされたコントロールが何であるかを常に知ることができます

さて、私が間違っていたら訂正してください。しかし、どちらが番号を受け取る必要がSendKeys.Send("1");あるかを知るためにそうしてください。そのためには、イベントをtextBox使用してs のみを登録できます。GotFocustextBox

ウィンドウが行っていることを実行して、次のようにテキストボックスを 1 つだけ使用することもできます。 ここに画像の説明を入力

それがあなたのニーズに合っていれば

于 2013-08-26T13:32:16.453 に答える
0

パラメータ forward = false でこれを使用するのはどうですか?

Control.SelectNextControl メソッド

おそらく、「カスタム数字キーパッド コントロール」で呼び出すことになるでしょう。

于 2013-08-26T13:58:56.110 に答える