none
Autohide des ToolStrips in einem MDI Form? RRS feed

  • 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?

     

    Mittwoch, 13. Mai 2009 10:28

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

    Dienstag, 30. Juni 2009 08:29
    Moderator

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,

     

    Freitag, 29. Mai 2009 14:16
    Moderator
  • 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,
    Montag, 29. Juni 2009 09:53
    Moderator
  • hmm das Toolstrip ist aber im MDI Parent im Augenblick wollte es auch nicht extra in ein MDIChild setzten. Geht das auch im MDI Parent zu lösen?
    Montag, 29. Juni 2009 15:54
  • 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

    Dienstag, 30. Juni 2009 08:29
    Moderator