Form und ShowDialog

05/04/2010 - 13:21 von ChristianT | Report spam
Hallo Leute,
ich habe ein Hauptform in der mittels "SubForm.ShowDialog" die SubForm
angezeigt wird.
Die Hauptform wird in der Taskbar angezeigt und die SubForm nicht.

Nun möchte ich, dass beim Minimieren der SubForm auch automatisch die
Hauptform minimiert wird.

Das mache ich mit:
Me.HauptForm.WindowState = FormWindowState.Minimized
Die Hauptform habe ich an die SubForm übergeben sodass ich von der
SubForm auf die HauptForm zugreifen kann.

Im Prinzip funktioniert das ja auch. Aber wenn ich dann auf die
Taskleiste klicke um die Hauptform wieder anzuzeigen, dann ist die
Subform entladen worden, was ich aber nicht will.

Wie kann ich vorgehen, dass nach dem Minimieren und anschließendem
Maximieren der Hauptform die mittels ShowDialog() angezeigte SubForm
erhalten bleibt?

Vielen Dank im Voraus
Christian Tauschek
 

Lesen sie die antworten

#1 Klaus Pater
05/04/2010 - 21:21 | Warnen spam
Hallo,

Form1 (Hauptform) startet das Form2 (SubForm) über Button1.

ich habe ein Hauptform in der mittels "SubForm.ShowDialog" die SubForm
angezeigt wird.
Die Hauptform habe ich an die SubForm übergeben sodass ich von der
SubForm auf die HauptForm zugreifen kann.



ShowDialog erlaubt direkt die Übergabe eines "Owners".

Wie kann ich vorgehen, dass nach dem Minimieren und
anschließendem Maximieren der Hauptform die mittels
ShowDialog() angezeigte SubForm erhalten bleibt?



Dialogresult verwenden um Kenntnis darüber zu erhalten, wie
sich Form2 verabschiedet hat.

Hier als Beispiel:

'Public Class Form1
Dim fsub As Form2 = Nothing
Dim fdr As DialogResult = Nothing

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
fsub = New Form2
fsub.StartPosition = FormStartPosition.CenterParent
fdr = fsub.ShowDialog(Me)
If fdr = Windows.Forms.DialogResult.Abort Then
fsub.Dispose()
fsub = Nothing
End If
End Sub

Private Sub Form1_Resize(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Resize
If fsub Is Nothing Then Exit Sub
Select Case Me.WindowState
Case FormWindowState.Maximized, FormWindowState.Normal
fsub.StartPosition = FormStartPosition.WindowsDefaultLocation
If Me.Tag IsNot Nothing Then
fsub.WindowState = CType(Tag, FormWindowState)
Me.Tag = Nothing
Else
fsub.WindowState = FormWindowState.Normal
End If
fdr = fsub.ShowDialog(Me)
If fdr = Windows.Forms.DialogResult.Abort Then
fsub.Dispose()
fsub = Nothing
End If
End Select
End Sub
End Class
'=Public Class Form2
Protected Overrides Sub WndProc(ByRef swfm As Message)
If swfm.Msg = WM_SYSCMD Then
Select Case swfm.WParam.ToInt32()
Case WM_SYSCMD_PARMS.SC_MAXIMIZE_B, _
WM_SYSCMD_PARMS.SC_MAXIMIZE_C
Me.Owner.Tag = FormWindowState.Maximized
Case WM_SYSCMD_PARMS.SC_MINIMIZE
Me.DialogResult = Windows.Forms.DialogResult.Ignore
Me.Owner.WindowState = FormWindowState.Minimized
Case WM_SYSCMD_PARMS.SC_CLOSE
Me.DialogResult = Windows.Forms.DialogResult.Abort
End Select
End If
MyBase.WndProc(swfm)
End Sub
End Class
'=Module Module1
Friend WM_SYSCMD As Int32 = &H112
Friend Enum WM_SYSCMD_PARMS As Integer
SC_CLOSE = &HF060I
SC_MAXIMIZE_B = &HF030I
SC_MAXIMIZE_C = &HF032I
SC_MINIMIZE = &HF020I
SC_RESTORE = &HF120
End Enum
End Module

######

frohe Ostern noch ;-)
k

Ähnliche fragen