Form1やForm2やForm3などでエラーが起きたときに、モジュールを通してfrmErrをエラーメッセージダイアログとしてモードレスで開くのですが、このときにfrmErrにフォーカスを移動せず、呼び出し元のフォームにフォーカスをあてておきたいのです。
Form1はMDIの子画面で、frmErrやForm2やForm3のOwnerFormは常にForm1の親画面になっています。
モジュールを通してfrmErrを呼びだしていますが、出来れば呼び出し元のフラグは持ちたくありません。
何かよい知恵をお貸しください。お願いします。
VB6.0
frmErrを呼び出した後に呼び出し元フォームに対してSetFocusしてはどうですか。
呼び出し元フォームはそれぞれモジュールを一旦呼んでいます。そのモジュール内でfrmErrを表示しているので、現状では呼び出し元フォームがわからないのです。
呼び出し元フォームを判断するよい方法ってありませんか?
または、frmErrをShowしたときにフォーカスを受け取らないみたいなやり方でもよいのですが・・・。
呼び出し元ウィンドウ=操作中のウィンドウでいいのかな?
↑でないよう(非アクティブ時にタイマーなどで呼び出すとか)なら引き数として
渡すしかないかな。(他に方法が思いつかない。)
'GetForegroundWindowとSetActiveWindowはAPIですけど仕様規約はあるのかな。
Public Sub frmErrShow()
Dim lnghWnd As Long
' Dim frmObj As Form
'現在の操作中のウィンドウは?
lnghWnd = GetForegroundWindow
frmErr.Show , MDIForm1
'ウィンドウをアクティブにする
Call SetActiveWindow(lnghWnd)
' For Each frmObj In Forms
' If frmObj.hwnd = lnghWnd Then
' frmObj.SetFocus
' Exit For
' End If
' Next
End Sub
#追加。
> または、frmErrをShowしたときにフォーカスを受け取らないみたいなやり方で
> もよいのですが・・・。
>
サブクラス化してWM_ACTIVEかWM_SETFOCUSを握りつぶせはいけそうな気がするけ
どお薦めはしません。
フォーカスをfrmErrに移さないように出来ました。
GODさん、ありがとうございました。
ツイート | ![]() |