- PR -

VB.NET MDI子ウィンドのフォーカスについて

1
投稿者投稿内容
ワンコ
会議室デビュー日: 2005/08/12
投稿数: 3
投稿日時: 2005-08-12 14:01
Windowsアプリで、MDIの子ウィンドのTabindex=0のコントロール(TextBox)にフォーカス(カーソル)が表示されません。
FormのActivatedイベントに xxx.Focus() を実行しても駄目でした。
Formのタイトルバーをクリックすると、フォーカスがあたるのですが...
すみません。どなたかご教授お願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-12 14:11
引用:

Formのタイトルバーをクリックすると、フォーカスがあたるのですが...
すみません。どなたかご教授お願いします。


MDI 子ウィンドウがアクティブになってないと、
その中のコントロールがアクティブになることはないです。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ワンコ
会議室デビュー日: 2005/08/12
投稿数: 3
投稿日時: 2005-08-12 14:18
MDI子フォームは、親フォームから以下のようにして表示しています。
frm.MdiParent = Me
frm.show()
これで、子フォームは表示されますが、Activeにはなっていないのですね。
では、Activeフォームにするには、
frm.Activate()
を呼べはいいのですか?

呼んでも、結果はかわりません。
やはり、タイトルバーをクリックすると、Activeになりカーソルが表示されます。
子フォームをActiveにするには、どうするのでしょうか?
すみません。宜しくお願いします。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 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 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-12 14:43
引用:

呼んでも、結果はかわりません。
やはり、タイトルバーをクリックすると、Activeになりカーソルが表示されます。
子フォームをActiveにするには、どうするのでしょうか?


Active にした後に Focus を設定していますか?
うーん、何か余計なものが入っていて邪魔されているのかな?

そもそも、1 番単純な構成でやると、Show メソッドの時点でアクティブになり、
初期フォーカスは TabIndex が 1 番若いコントロールにフォーカスされています。

周辺のコード レビューをしてみましょう。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ワンコ
会議室デビュー日: 2005/08/12
投稿数: 3
投稿日時: 2005-08-12 16:25
MDI親フォームからの子フォームの起動の仕方ですが、
アドバイスもらったようにメニューバーから起動するとフォーカスの制御は、問題ありませんでした。うまくいきます。

ただ、現在作成中のプログラムでは、子フォームの起動は、MDI親フォームに付けたTreeViewからクリックで起動しています。
この場合ですと、子フォームがshow後、FormのActivatedイベント内で、
textbox1.focus
としてもカーソルが表示されません。
もう少し調べてみます。
色々アドバイスありがとうございます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-12 16:55
引用:

MDI親フォームに付けたTreeViewからクリックで起動しています。


TreeView が原因ですね。
Node 持ってるとフォーカス掴んじゃうんですよね > TreeView



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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