ユーザーコントロールのフォーカス移動

テキストボックスを複数並べたユーザーコントロールで、リターンキーでフォーカスを移動できるように下記のメソッドを作成し、各テキストボックスのKeyDownイベントから呼び出すようにしました。

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
    // リターンキーの時
    if (e.KeyCode == Keys.Enter) {

      // 次のコントロールへフォーカス移動
      this.SelectNextControl(this.ActiveControl, !e.Shift, true, true, true);               
    }
}

でも、このユーザーコントロールをフォームにはりつけて、リターンを押していくと、ユーザーコントロール内で、フォーカスがぐるぐる回ってしまいます。

Tabキーを押していけばちゃんと移動して行くので、
SelectNextControl を this.ProcessTabKey(!e.Shift);
と、タブキーを偽装してみましたが、結果は同じでした。(T0T)

が、
Tabキーを押したときと、Tabキーを偽装したときの違いを考えていて、
ふとひらめきました。

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
    // リターンキーの時
    if (e.KeyCode == Keys.Enter) {

      // 次のコントロールへフォーカス移動
      this.Parent.SelectNextControl(this.ActiveControl, !e.Shift, true, true, true);               
    }
}

これでうまくいけました。
this.SelectNextControl を、
this.Parent.SelectNextControl に変えただけです。

親フォームから呼べばよかったんですね (^0^)v

コメント

タイトルとURLをコピーしました