2012-04-04 6 views
1

私はInteropFormsToolkitバージョン2.1を使用しています。私は、.NETフォームがVB6フォームでスローされるイベントから.NETフォームがロードされたときに、.NETフォームが上にとどまることを確認しようとしています。私は多くのことを試してきましたが、何もできません。私はz-indexから、User32.dllにマネージドコールを追加して最前線にプッシュするなど、すべてを試しました。InteropフォームをVB6アプリケーションの先頭に保つ

すべてのアイデアをいただければ幸いです。

+1

にShowDialogでそれを行う方法を知らない)またはTopMostは機能するはずです。ショー(所有者)が動作するようにするには、VB6ウィンドウの適切なラッパーを取得する必要があります。 IWin32WindowまたはNativeWindow。あなたがツールキットからそれを得ることができるかどうかは考えられませんが、可能でなければなりません。 –

+0

ShowDialogはイベントがVB6にバブルダウンしないためです。 –

答えて

1
あなたが使用することができますVB6で

として:

Private Sub Form_Load() 
OnTopMe Me, True 
End Sub 

とモジュールのコード次

Declare Function SetWindowPos Lib "User32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long 


Public Sub OnTopMe(FormID As Object, onTop As Boolean) 
    If onTop = True Then SetWindowPos FormID.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE 
    If onTop = False Then SetWindowPos FormID.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE 
End Sub 

私は(.NET

+0

私が遭遇する問題は、VB6アプリケーションが.showを使って.NET Winformを開くことです。その後、.NET WinformはVB6にバブルするイベントを発生させます。これは、.NETフォームからボタンなどを選択するときに表示する必要のあるVB6の「詳細」フォームがいくつか存在するためです。詳細フォームは一番上に置く必要があります。詳細フォームが閉じられると、.NETフォームがVB6のメインフォームの後ろに(時には)スリップします。 HTH。 –

+0

あなたのVB6アプリ=>ロード.Netフォーム=>イベント.Netフォーム=> VB6でキャプチャし、そのイベントの上部にvb6フォームを表示することを意味します。私が間違っている場合は、vb6がイベントドリブンであるため、すべてのイベントについて説明してください。 – Vineet1982

+0

あなたは正しいです。したがって、VB6 App =>はFrmMain.vbを含む(VB6)=>ボタンはfrmOrder(.NET)=>ボタンをロードするfrmOrderのボタンはVB6のLoadDetailsEventを起動するFrmMain =>イベントでは、VB6 FrmOrderDetails.vb(VB6)はShowDialog()です。 FrmOrderDetailsを閉じると、frmOrderがFrmMainの後ろにずれているように見えます。 –

関連する問題