2012-04-04 7 views
1

Ich verwende die InteropFormsToolkit Version 2.1. Ich versuche sicherzustellen, dass, wenn ein .NET-Formular von einem Ereignis geladen wird, das auf dem VB6-Formular ausgelöst wird, das .NET-Formular oben bleiben kann. Ich habe viele Dinge ausprobiert und kann nichts zur Arbeit bringen. Ich habe alles von Z-Index versucht, einen verwalteten Anruf in User32.dll hinzufügen, um es in den Vordergrund zu schieben, etc.Keep Interop Form an die Spitze der VB6-Anwendung

Alle Ideen sind willkommen.

+1

Showdialog() oder TopMost sollte funktionieren. Damit Show (Besitzer) funktioniert, damit es oben bleibt, müssen Sie einen geeigneten Wrapper für das VB6-Fenster erstellen. Ein IWin32Window oder NativeWindow. Keine Ahnung, ob du das aus dem Toolkit herausholen kannst, sollte möglich sein. –

+0

ShowDialog wird nicht als Ereignisse auf VB6 heruntergeblasen. –

Antwort

1

in VB6 können Sie verwenden, wie:

Private Sub Form_Load() 
OnTopMe Me, True 
End Sub 

und folgenden Code in Modul

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 

Ich weiß nicht, wie es in .net zu tun

+0

Das Problem, auf das ich stoßen könnte, ist, dass die VB6-Anwendung mit .show ein .NET winform öffnet. Dann löst die .NET-Winform ein Ereignis aus, das zu VB6 übergeht. Der Grund dafür ist, dass es mehrere andere VB6 "Detail" -Formulare gibt, die angezeigt werden müssen, wenn Schaltflächen usw. aus dem .NET-Formular ausgewählt werden. Das Detailformular müsste oben liegen. Wenn das Detailformular geschlossen ist, rutscht das .NET-Formular (manchmal) in das VB6-Hauptformular. HTH. –

+0

bedeutet das, dass Ihre VB6-App => Loads .Net-Formular => Event on .Net-Formular => in VB6 gefangen und zeigen Sie das Vb6-Formular an der Spitze dieses Ereignisses. Wenn ich falsch liege, dann lasst mich das mit jedem Event erklären, da vb6 ereignisgesteuert ist. – Vineet1982

+0

Sie haben Recht. Also VB6 App => Enthält FrmMain.vb (VB6) => Button lädt frmOrder (.NET) => Button auf frmOrder löst LoadDetailsEvent in VB6 aus FrmMain => Im Ereignisfall ist VB6 FrmOrderDetails.vb (VB6) ShowDialog(). Wenn FrmOrderDetails geschlossen ist, scheint frmOrder hinter FrmMain zu verschwinden. –

Verwandte Themen