テキストボックスを複数並べたユーザーコントロールで、リターンキーでフォーカスを移動できるように下記のメソッドを作成し、各テキストボックスの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



コメント