- 締切済み
VB.Net SplitContainerの中に
お世話になります。 Visual Studio 2012 VB.Net Windows 7 の環境で開発してます。 SplitContainer の中に SplitContainer を配置して ActiveControl の名前を取得すると、一番外側のSplitContainer名が表示されるのですが、実際のコントロール(TextBoxが配置されている SplitContainer) の名前を取得するにはどうしたらよいでしょうか? SplitContainer の中に SplitContainer を配置するのはあまり良くない方法でしょうか? 何卒よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
回答No.1
TextBox にフォーカスがあるのに SplitContainer が取れる時点でおかしい。 「SplitContainer、ActiveControl 」でWEB検索すればたくさん事例が出てくる有名な話。 イベントドリブンで引数にイベントを起こしたコントロールが 渡されてくるから、そもそも ActiveControl で何かを 判断するようなプログラムを書く人が少なく、特に問題視 されていない感じ。 ActiveControl が重要なら自分で Panel と Splitter で作りなおすのがいいのかな?私自身はこの問題を解決しないと いけない状況になった事が無いので何ともいえませんが。
補足
MARU4812 さん お世話になります。 KeyDownイベントでEnterキーが押された時に次のコントロールに移るようにしているのですが、 If e.KeyCode = Keys.Enter Then Me.SelectNextControl(Me.ActiveControl, forward, True, True, True) End If SplitContainerのコンテナ内にあるコントロールの場合、Me.ActiveControlがSplitContainerの名前を返しているのです。通常ならTextBoxなり他のコントロールの名前になると思うのですが、SplitContainer内部のコントロールをMe.ActiveControlで取得するとそうなるみたいなんです。 SelectNextControlを使用する場合、SplitContainerの数だけ分岐させないといけないのかなと思ったのが主旨でございました。 >TextBox にフォーカスがあるのに >SplitContainer が取れる時点でおかしい。 とございますが、 実際にKeyDownイベント内で、Me.ActiveControl.Name で画面に表示させると、SplitContainerの名前が出てきます。 Senderから型を抽出して分岐させていくのが解決方法なのか、まったく別の一文で解決できる問題なのか もしご指摘がございましたら、改めてご指南いただければと存じます。