テキストボックスを複数並べたユーザーコントロールで、リターンキーでフォーカスを移動できるように下記のメソッドを作成し、各テキストボックスのKeyDownイベントから呼び出すようにしました。
1 2 3 4 5 6 7 8 9 |
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キーを偽装したときの違いを考えていて、
ふとひらめきました。
1 2 3 4 5 6 7 8 9 |
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