モードレスフォームを開いてもフォーカスを移動しないようにしたい

解決


まち  2005-03-08 19:01:45  No: 120089

Form1やForm2やForm3などでエラーが起きたときに、モジュールを通してfrmErrをエラーメッセージダイアログとしてモードレスで開くのですが、このときにfrmErrにフォーカスを移動せず、呼び出し元のフォームにフォーカスをあてておきたいのです。

Form1はMDIの子画面で、frmErrやForm2やForm3のOwnerFormは常にForm1の親画面になっています。
モジュールを通してfrmErrを呼びだしていますが、出来れば呼び出し元のフラグは持ちたくありません。
何かよい知恵をお貸しください。お願いします。

VB6.0


GOD  2005-03-08 19:13:58  No: 120090

frmErrを呼び出した後に呼び出し元フォームに対してSetFocusしてはどうですか。


まち  2005-03-08 20:34:40  No: 120091

呼び出し元フォームはそれぞれモジュールを一旦呼んでいます。そのモジュール内でfrmErrを表示しているので、現状では呼び出し元フォームがわからないのです。
呼び出し元フォームを判断するよい方法ってありませんか?
または、frmErrをShowしたときにフォーカスを受け取らないみたいなやり方でもよいのですが・・・。


GOD  2005-03-08 20:52:05  No: 120092

呼び出し元ウィンドウ=操作中のウィンドウでいいのかな?
↑でないよう(非アクティブ時にタイマーなどで呼び出すとか)なら引き数として
渡すしかないかな。(他に方法が思いつかない。)

'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


GOD  2005-03-08 20:55:57  No: 120093

#追加。

> または、frmErrをShowしたときにフォーカスを受け取らないみたいなやり方で
> もよいのですが・・・。
>
サブクラス化してWM_ACTIVEかWM_SETFOCUSを握りつぶせはいけそうな気がするけ
どお薦めはしません。


まち  2005-03-08 23:44:52  No: 120094

フォーカスをfrmErrに移さないように出来ました。
GODさん、ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加