- PR -

VB.NET でのフォーカスセットの方法

投稿者投稿内容
Swd
会議室デビュー日: 2003/07/08
投稿数: 8
投稿日時: 2003-08-13 17:13
実行時に、Form を showdialogにて表示した時に、
TABINDEX=0 の項目にフォーカスをセットしたいのですが上手くいかず、
フォーカスがセットされません。
表示された画面上では、フォーカスがどこにもセットされていないように見えます。

デバッグでは、TABINDEX=0 の項目にセットされるのですが。。。

また、Form を表示する前に、表示したフォームを常に手前に表示したいため、
下記APIを使用しているのが原因ではないかと思うのですが。
(このAPIを使用しないと、実行時でもフォーカスがセットされる)

≪実行順序≫
(1)SetWindowPos(mHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)

(2)intRet = Form.ShowDialog()


ただ、フォーカスがセットされない原因の
詳細がよくわからないのでどなたかわかられる方がおれば、
教えていただければと思います。

よろしくお願いします。
ken
会議室デビュー日: 2003/08/12
投稿数: 7
投稿日時: 2003-08-13 19:54
WindowsFormの話でしょうか?

VB.NETは使ってないのでどうかわかりませんが、
Tabindex = 0 のコントロールの
FocusメソッドをあえてCallしてみた場合には、フォーカスセットされます
でしょうか?

Swd
会議室デビュー日: 2003/07/08
投稿数: 8
投稿日時: 2003-08-13 21:00
WindowsFormになります。

Tabindex=0 のコントロールへ
Focusメソッドを使用しても、フォーカスはセットされませんでした。

また、Selectメソッドにて、選択されている状態にすることはできたのですが、
フォーカスはセットされませんでした。
FOX
ベテラン
会議室デビュー日: 2002/04/08
投稿数: 63
お住まい・勤務地: いなか
投稿日時: 2003-08-14 11:08
こんにちは。

対象のコントロールのTabStopがFalseだったりしませんか?
#見当違いだったらすいません。

一応確認してみては。

Swd
会議室デビュー日: 2003/07/08
投稿数: 8
投稿日時: 2003-08-14 14:36
どうもです。

対象コントロールの 
TabStopは、Trueでした。

SetWindowPosを使用しなければ、フォーカスはセットされる
のですが。
APIは使用しないほうが良いのでしょうか。。。

ken
会議室デビュー日: 2003/08/12
投稿数: 7
投稿日時: 2003-08-15 03:56
SetWindowPosを呼ぶときのタイミングの問題かもしれません。
SetWindowPosは、どういったタイミングで呼んでいますか?

formのload時等にcallしていますでしょうか?
であるならば、activateイベント時などに場所を
変えてみるなどして、問題が解消しませんでしょうか?

[ メッセージ編集済み 編集者: ken 編集日時 2003-08-15 03:57 ]
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2003-08-15 08:56
対症療法ですが、
表示したフォームを常に手前に表示する処理をTopMostプロパティでしてみてはどうでしょうか?
Swd
会議室デビュー日: 2003/07/08
投稿数: 8
投稿日時: 2003-08-18 22:22
kenさん、rucioさん返信ありがとうございました。
返答遅くなりました。すいません。

どちらも試して見ました。
TabIndex=0 へフォーカスがセットされるか試した結果です。

(1)formのactivateイベント時にSetWindowPosをcall
→成功

(2)formのTopMostプロパティを TRUE にする
→失敗

(3)formのloadイベント時にSetWindowPosをcall
→成功

■元々は、showdialogを行う前にSetWindowPosをcallしておりました。
どうもcallするタイミングが悪かったようです。

(3)にて行おうと思います。
なんとか解決いたしました。ありがとうございました。


★また、formロード時にコールされる順番等の詳細な情報を調べる場所、
 参考などがかかれている良いページがあれば
 教えていただければとおもいます。

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