- PR -

カスタムコントロールのフォーカス移動について

1
投稿者投稿内容
MrKong
常連さん
会議室デビュー日: 2004/01/24
投稿数: 22
投稿日時: 2004-02-05 13:51
VB.NET2003でカスタムコントロールを作成したのですが、
そのコントロールを貼り付けたフォーム内でのフォーカス移動が
思うようにいきません。
どなたかお教え願えませんでしょうか?


<作成したコントロール>
TextBoxを3つ並べたものを1つのコントロールとして作成
親コントロール名:UserControl
子コントロール名:TextBox1、TextBox2、TextBox3

<実現したい動作>
あるキー(→キーなど)を押したときに次の動作を実現させる
1.カスタムコントロール内では、
  TextBox1→TextBox2→TextBox3の順にフォーカスを移動させる
2.フォーム内ではコントロールごとにフォーカスを移動させる
  Button1→UserControl→(1の内部フォーカス移動)→Button2の順
 

1は子コントロールの各TextBoxのLostFocus時に、
GetNextControlで指定することで実現できました。
ただし、2の方がうまくいきません。
TextBox3のNextControlがTextBox1になってしまい、
カスタムコントロールの内部でフォーカスが循環してしまいます。
調べてみると、GetNextControlメソッドでは、
子コントロールのタブオーダーしか認識できないようです。
しかし、Tabキーを押すとうまく動作します。(なぜだろう、、、)
このTabキーでの動作を、他のキー操作で実現する方法はないのでしょうか???

MrKong
常連さん
会議室デビュー日: 2004/01/24
投稿数: 22
投稿日時: 2004-02-06 19:44
自己解決の報告です。

調べたところ、親コントロールはフォーカスを持たないようです。
ですから、SelectNextControlメソッドで次のコントロールを
アクティブにしようとすると、子コントロール内でフォーカスが
循環してしまうみたいです。
解決策としては、次のようなことを考えました。

1.3つ目のTextBoxでEnterキーが押されたときに
  新たな自作イベントを発生させる
2.カスタムコントロールを貼り付けたフォーム側でこのイベントが発生したときに、
  次のコントロールにフォーカスを移す
  (コントロール名は直打ち)

なんとかこれで乗り切りました。
ただし、次のコントロール名をプログラム内で直打ちするので、
汎用性のあるコントロールではないですね。
1

スキルアップ/キャリアアップ(JOB@IT)