- - PR -
VB.NET MDI子ウィンドのフォーカスについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-12 14:01
Windowsアプリで、MDIの子ウィンドのTabindex=0のコントロール(TextBox)にフォーカス(カーソル)が表示されません。
FormのActivatedイベントに xxx.Focus() を実行しても駄目でした。 Formのタイトルバーをクリックすると、フォーカスがあたるのですが... すみません。どなたかご教授お願いします。 | ||||
|
投稿日時: 2005-08-12 14:11
MDI 子ウィンドウがアクティブになってないと、 その中のコントロールがアクティブになることはないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-08-12 14:18
MDI子フォームは、親フォームから以下のようにして表示しています。
frm.MdiParent = Me frm.show() これで、子フォームは表示されますが、Activeにはなっていないのですね。 では、Activeフォームにするには、 frm.Activate() を呼べはいいのですか? 呼んでも、結果はかわりません。 やはり、タイトルバーをクリックすると、Activeになりカーソルが表示されます。 子フォームをActiveにするには、どうするのでしょうか? すみません。宜しくお願いします。 | ||||
|
投稿日時: 2005-08-12 14:25
どうもです。
じゃんぬさんが仰られている通り, 子画面がアクティブになっている事が必要だと思います。 以下のコードで実験しましたところ, 子画面のテキストボックスにフォーカスが当たっていました。 □親 IsMdiContainer = True ・Form Load(メニューの追加を行ってます) Dim mm As MainMenu = New MainMenu Dim mi As MenuItem = New MenuItem("メニュー") mi.MenuItems.Add(New MenuItem("こども", New EventHandler(AddressOf Me.showMdiChild))) mm.MenuItems.Add(mi) Me.Menu = mm Private Sub showMdiChild(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim f As ChildForm = New ChildForm f.MdiParent = Me f.Show() End Sub □子 ・Form Load Me.TextBox1.Focus() [ メッセージ編集済み 編集者: なおこ(・∀・) 編集日時 2005-08-12 14:27 ] | ||||
|
投稿日時: 2005-08-12 14:43
Active にした後に Focus を設定していますか? うーん、何か余計なものが入っていて邪魔されているのかな? そもそも、1 番単純な構成でやると、Show メソッドの時点でアクティブになり、 初期フォーカスは TabIndex が 1 番若いコントロールにフォーカスされています。 周辺のコード レビューをしてみましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-08-12 16:25
MDI親フォームからの子フォームの起動の仕方ですが、
アドバイスもらったようにメニューバーから起動するとフォーカスの制御は、問題ありませんでした。うまくいきます。 ただ、現在作成中のプログラムでは、子フォームの起動は、MDI親フォームに付けたTreeViewからクリックで起動しています。 この場合ですと、子フォームがshow後、FormのActivatedイベント内で、 textbox1.focus としてもカーソルが表示されません。 もう少し調べてみます。 色々アドバイスありがとうございます。 | ||||
|
投稿日時: 2005-08-12 16:55
TreeView が原因ですね。 Node 持ってるとフォーカス掴んじゃうんですよね > TreeView _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1