Position vom Submenu des Menustrip bestimmen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Hotdogxxxx.

    Position vom Submenu des Menustrip bestimmen

    Hallo Ihr wissenden,

    ich habe eine kleine Menubar erstellt welches sich an den rechten unteren Rand positioniert.
    Wenn ich nun die einzelnen Buttons betätige, öffnen sich ein weiteres Submenu welches weitere DropdownItems beinhaltet.

    Problem: Das Submenu und die DropdownItems öffen sich kreuz und quer und wenn ein zweiter Bildschirm vorhanden ist, dann öffnen diese sich zum Teil am linken Bildschirmrand des zweiten Bildschirms.
    Wie kann ich also die Position des Sumbenüs und der DropdownItems festlegen, so das dich das submenü nur oberhalb der Menübar öffnet und die dropdown dann jur nach z.B. links.

    Vielen Dank im voraus. :thumbsup:

    LG
    Hotdog
    @Hotdogxxxx Ich bin mir nicht sicher, aber das macht das System, und wenn ja, hast Du keine Chance.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    sonne75 schrieb:

    unten rechts
    sind die NotifyIcons.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Sonne: nochmal zur Erklärung: Ich habe eine kleine Form die lediglich ein MenuStrip Control beinhaltet.
    Diese Form wird am rechten unteren Bildschirmrand, oberhalb der Taskbar (NotifyIcons) eingeblendet, wenn in der Taskbar mit der rechten Maustaste auf den Notifyer geklickt wird.
    Soweit funktioniert alles wie gewüscht.
    Das Menu besteht aus drei Ebenen. Menu > SubMenu > DropdownItem. Kicke ich also auf das Menuitem, erscheint ein weiterer Menuitem und welches wiederum Dropdownitems beinhaltet.

    Problem: Das Problem besteht hauptsächlich wenn zwei Bildschirme verwendet werden. Denn wenn man auf das MenuItem klickt öffnet sich unkontrolliert das SubMenu rechts, links, obenhalb oder unterhalb vom Menuitem und die DropdownItems öffnen sich wiederum rechts oder links vom SubmenuItem. Wenn man jedoch zwei Bildschirme verwendet öffnet sich das Submenu und die DropdownItems auf dem dem zweiten Bildschirm. Möchte man diese dann anklicken verschwinden sie sowie man mit der Maus vom ersten Bildschirm in den zweiten wechselt und somit ist das Menu im Prinzip nicht funktionsfähig da man die einzelnen Menupunkte nicht anklicken kann.

    Hättet ihr eine Idee wie ich alles auf einem Bildschirm halten könnte oder zumindest dieses automatische ausblenden der Untermenus abschalten kann.
    @Hotdogxxxx Kannst Du mal das komplette GUI-Projekt posten (ohne die eigentliche Funktionalität)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Da gibt es an sich nicht viel zu posten.

    Wie gesagt die Form besteht nur aus einem MenuStrip Control. Die einzelnen Menupunkte sind Manuell hinzugefügt.

    und die Form wird mit dem folgenden Code ans untere Ende positioniert:

    VB.NET-Quellcode

    1. Private Sub Menu_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. 'Position
    3. Me.StartPosition = System.Windows.Forms.FormStartPosition.Manual
    4. Dim X As Integer = My.Computer.Screen.WorkingArea.Right
    5. Dim Y As Integer = My.Computer.Screen.WorkingArea.Bottom
    6. Me.Location = New System.Drawing.Point(X - Me.Width - 2, Y - Me.Height - 5)
    7. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    8. Me.BackColor = Color.Transparent
    9. Me.Opacity = 0.85
    10. End Sub


    Ich habe jetzt zwar gefunden, wie ich das Dropdown der einzelnen Punkte ein und ausblenden kann aber das positionieren über show funktioniert nicht.
    Beispiel:

    VB.NET-Quellcode

    1. Private Sub Sub1ToolStripMenuItem_Click(sender As ToolStripMenuItem, e As EventArgs) Handles Sub1ToolStripMenuItem.Click
    2. sender.DropDown.Show(New Point(CInt(500), CInt(500))) <--- mit show könnte ich es positionieren aber es geht nicht.
    3. 'sender.HideDropDown() <--- Blendet das Dropdown aus
    4. 'sender.ShowDropDown() <--- Blendet das Dropdown ein
    5. End Sub
    Habe die Lösung gefunden. Für alle die ein ähnliches Problem haben.

    Weiß nicht ob es die perfekte Lösung ist aber sie löst mein Problem.
    Ich habe beim öffnen der Form folgenden Code hinzugefügt.

    VB.NET-Quellcode

    1. Dim Menu As MenuStrip = Me.MenuStrip1
    2. For Each Item As ToolStripMenuItem In Menu.Items
    3. If Item.HasDropDown Then Item.DropDownDirection = ToolStripDropDownDirection.AboveLeft '<---- Bestimmt die Position
    4. For Each SubItem As ToolStripMenuItem In Item.DropDownItems
    5. If SubItem.HasDropDown Then SubItem.DropDownDirection = ToolStripDropDownDirection.Left '<---- Bestimmt die Position
    6. Next
    7. Next