| 

.NET C# Java Javascript Exception

3
Hallo liebe CK-Com,

heute melde ich mich mal mit einem, aus meiner Sicht, eher ungewöhnlichen Problem.
Ich möchte in VB.NET eine Form semi-modal anzeigen lassen.
Damit meine ich konkret folgendes Szenario:
Benutzer öffnet über das Menü der Main-Form eine andere Form (z.B. Einstellungsdialog). Er soll nun frei zwischen der Main-Form und der 2., nicht modal angezeigten, Form hin und herschalten können.
Sobald er aber das Programm komplett verlässt, also der Fokus weder auf der Main-Form noch auf der 2. Form liegt und er dann wieder auf die Main-Form meiner Anwendung zuwückwechselt soll die 2. Form erst einmal in den Vordergrund geholt werden, sozusagen als Erinnerung "Hey, du hast das Einstellungsfenster noch offen, vergiss das bitte nicht!".

Ich habe ein bisschen mit GetForegroundWindow aus der user32.dll rumprobiert in den Activated und Deactivate Events der beiden Forms, nur leider feuert das Deactivate Event des Einstellungsfensters vor dem Activated Event der Main-Form, wodurch eigentlich immer das Einstellungsfenster wieder aktiviert wird und ich sozusagen ein "echtes" modales Fenster anstatt einem semi-modalen Fenster nach meinen Wünschen habe.

Anschließend noch ein wenig Code... bitte keine Diskussion über die Namensgebung!
Private Sub frmMain_Activated(ByVal sender As Object, ByVal e As EventArgs)
If Allgemein.bBringEditWndToFront_WennMainWndActivatedEvent AndAlso EditWnd IsNot Nothing Then
EditWnd.WindowState = FormWindowState.Normal
EditWnd.Activate()
End If
End Sub

Private Sub frmMain_Deactivate(ByVal sender As Object, ByVal e As EventArgs)
If EditWnd IsNot Nothing AndAlso Not Allgemein.GetForegroundWindow().Equals(EditWnd.Handle) Then
Allgemein.bBringEditWndToFront_WennMainWndActivatedEvent = True
Else
Allgemein.bBringEditWndToFront_WennMainWndActivatedEvent = False
End If
End Sub

Private Sub frmEdit_Activated(ByVal sender As Object, ByVal e As EventArgs)
Allgemein.bBringEditWndToFront_WennMainWndActivatedEvent = False
End Sub

Private Sub frmEdit_Deactivate(ByVal sender As Object, ByVal e As EventArgs)
If Not Allgemein.GetForegroundWindow().Equals(MainWnd.Handle) Then
Allgemein.bBringEditWndToFront_WennMainWndActivatedEvent = True
Else
Allgemein.bBringEditWndToFront_WennMainWndActivatedEvent = False
End If
End Sub
News:
13.04.2012
Karill Endusa 1,5k 1 9
Ich hab das jetzt ersma so gelöst, dass ich das neue Form die aufrufende Form als Owner zuweise, so ist es immerhin immer im Vordergrund vor Dieser und wird nicht übersehen...
Karill Endusa 11.05.2012