Benutzer mit den meisten Antworten
Autohide des ToolStrips in einem MDI Form?

Frage
-
Hallo zusammen,
unzwar habe ich zur autohidefunktion eines ToolStrips folgenden Code gefunden, der funktioniert allerdings nicht in einem MDI Form:
Private Sub Form1_MouseMove ( ByVal sender As Object , ByVal e As System . Windows . Forms . MouseEventArgs ) Handles Me . MouseMove
If Me . ToolStrip1 . Bounds . Contains ( e . Location ) Then
Me . ToolStrip1 . Visible = True
Else
Me . ToolStrip1 . Visible = False
End If
End Sub
Könnte mir da jmd. weiterhelfen bzw. sagen wie ich das selbe im mdi form hinbekomme?
Antworten
-
Hallo Zidane1x,
Es geht auch in der MDI Parent Form.
.NET MDI Parent Form enthaltet eine zusätzliche Child Kontrolle von MdiClient Art.
Diese Kontrolle füllt den sichtbaren Teil des Hintergrunds des Forms und versteckt den wahren Hintergrund.
Die Mouse Leistungsart ist dann zu dieser MdiClient Kontrolle gesendet, nicht zu der Parent Form, deswegen man muss die Ereignisse die von der MdiClient Kontrolle kommen empfangen.
Der nächste Code Abschnitt zeigt eine einfache Technik die dieses Problem löst.
Auf einem Knopf fängst Du die MdiClient Kontrolle ab und hängst ihr das MouseMove Ereignis an.
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim mdiClient As MdiClient For Each ctrl As Control In Me.Controls mdiClient = TryCast(ctrl, MdiClient) If mdiClient IsNot Nothing Then Exit For Next If mdiClient IsNot Nothing Then AddHandler mdiClient.MouseMove, AddressOf MouseMoveHandler End If End Sub Private Sub MouseMoveHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove If Me.ToolStrip1.Bounds.Contains(e.Location) Then Me.ToolStrip1.Visible = True Else Me.ToolStrip1.Visible = False End If End Sub
Grüße,
Robert
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 30. Juni 2009 08:30
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 1. Juli 2009 11:21
Alle Antworten
-
Hallo Zidane1X,
Wen du meinst das beim schliessen des MDI child Fenster nach dem du die ToolStrip auf den parents ToolStripContainer gezogen hast das diese nicht verschwindet kannst du versuchen das untere:Auf der Dispose Methode des MDI child Forms versuch mal zu schreiben:
Me.ToolStrip1.Hide()
Me.ToolStrip1.Dispose()
Gruesse,
-
Hallo Zidane1X,
Auf dem Ereignis MouseMove des MDI Child Fensters schreibt man der folgenden Code:
Private Sub Form2_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove If Me.ToolStrip1.Bounds.Contains(e.Location) Then Me.ToolStrip1.Visible = True Else Me.ToolStrip1.Visible = False End If End Sub
Dieser zeigt oder versteckt das Toolstrip das auf dieses MDI Child Fenster eingefügt ist.
Grüße, -
Hallo Zidane1x,
Es geht auch in der MDI Parent Form.
.NET MDI Parent Form enthaltet eine zusätzliche Child Kontrolle von MdiClient Art.
Diese Kontrolle füllt den sichtbaren Teil des Hintergrunds des Forms und versteckt den wahren Hintergrund.
Die Mouse Leistungsart ist dann zu dieser MdiClient Kontrolle gesendet, nicht zu der Parent Form, deswegen man muss die Ereignisse die von der MdiClient Kontrolle kommen empfangen.
Der nächste Code Abschnitt zeigt eine einfache Technik die dieses Problem löst.
Auf einem Knopf fängst Du die MdiClient Kontrolle ab und hängst ihr das MouseMove Ereignis an.
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim mdiClient As MdiClient For Each ctrl As Control In Me.Controls mdiClient = TryCast(ctrl, MdiClient) If mdiClient IsNot Nothing Then Exit For Next If mdiClient IsNot Nothing Then AddHandler mdiClient.MouseMove, AddressOf MouseMoveHandler End If End Sub Private Sub MouseMoveHandler(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove If Me.ToolStrip1.Bounds.Contains(e.Location) Then Me.ToolStrip1.Visible = True Else Me.ToolStrip1.Visible = False End If End Sub
Grüße,
Robert
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 30. Juni 2009 08:30
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 1. Juli 2009 11:21