Contextmenustrip zeigts in der Taskleiste an

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Denny.

    Contextmenustrip zeigts in der Taskleiste an

    hi,

    folgendes problem: ich möchte ein contextmenustrip anzeigen lassen (auch außerhalb der form). dazu hab ich einfach

    VB.NET-Quellcode

    1. Contextmenustrip1.Show(System.Windows.Forms.Cursor.Position)


    verwendet. aber jetzt zeigt es immer das contextmenu in der taskleiste an:



    Kann ich das mit normalen vb net-bordmitteln verhindern oder muss ich da die api zu hilfe nehmen? weil contextmenustrip1.showintaskbar gibts nicht :D

    mfg
    nein, du hast das falsch verstanden: ich will keinen eintrag ins windows-kontextmenü machen, sondern ich will nur, dass mein ContextmenuStrip nicht in der Taskleiste angezeigt wird. weil die einträge des ContextmenuStrips werden immer dynamisch erzeugt, das wäre 1. im windows-Kontextmenü viel zu aufwendig und 2. viel zu unübersichtlich für den anwender.

    Quellcode

    1. Dim mi As MethodInfo = GetType(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance Or BindingFlags.NonPublic)
    2. mi.Invoke(TrayIcon, Nothing)


    das funktioniert 100%ig
    TrayIcon ist ein notifyicon

    so wird das menü an der mausposition angezeigt
    @Denny: er will in Windows Taskleiste das KontextMenü ausblenden/sperren und nicht anzeigen, das hater doch eindeutlich geschrieben.
    nein, du hast das falsch verstanden: ich will keinen eintrag ins windows-kontextmenü machen, sondern ich will nur, dass mein ContextmenuStrip nicht in der Taskleiste angezeigt wird. weil die einträge des ContextmenuStrips werden immer dynamisch erzeugt, das wäre 1. im windows-Kontextmenü viel zu aufwendig und 2. viel zu unübersichtlich für den anwender.
    haust du hier beiträge zusammen un den höcheren Rang zu erreichen !
    :D :D :D
    ja hallo???
    das ist die lösung!
    anstatt contextmenustrip.show soll er meinen code benutzen
    das geht nicht anders
    probiers doch mal

    wenn einer ahnung von contextmenustrips und toolstripmenuitems hat dann bin ich es
    siehe officebar

    edit:
    lad mal ein testprojket hoch dann mach ich dir das mit meinem code!
    ja hallo???
    das ist die lösung!
    anstatt contextmenustrip.show soll er meinen code benutzen
    das geht nicht anders
    probiers doch mal

    wenn einer ahnung von contextmenustrips und toolstripmenuitems hat dann bin ich es
    siehe officebar

    edit:
    lad mal ein testprojket hoch dann mach ich dir das mit meinem code!
    "Windows KontextMenü" ausblenden/sperren nicht von eigene Anwendung ! :D :D :D
    kräftig da neben geschossen !
    @Denny: irgtend - wie verstehe dich nicht ganz, lese mal sein ersten Beitrag, er will "System KontextMenü von WIndows" ausblenden, siehe seine Screenshot !
    Er braucht nicht dein Projekt sondern Code, und das was du hast ist KontextMenü von Eingene Anwendung!

    :D :D :D
    Hey Alex2000,
    ich glaube, du hast da etwas falsch verstanden.
    Er hat ein ContextMenuStrip und will es außerhalb des Forms anzeigen.
    Doch es wird immer in der Taskleiste angezeigt.

    MfG,
    -haiyyu
    @Denny:

    dein code funktioniert ganz gut, er zeigt aber das Kontextmenu vom NotifyIcon an. Das Kontextmenu, das ich anzeigen will, ist aber nicht das vom NotifyIcon, sondern ein ganz einfacher ContextmenuStrip (der nicht am NotifyIcon ist).

    /EDIT:

    Also, um das ganz klar noch mal auszudrücken :D: ich habe als 1. mit Contextmenustrip1.Show(System.Windows.Forms.Cursor.Position) das Kontextmenu (nicht vom NotifyIcon oder sonstirgendwas; einfach nur den Contextmenustrip) anzeigen lassen. Aber dann zeigt es ja das "Teil" in der Taskleiste an.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „freecoder“ ()

    versuch es mal so:

    Quellcode

    1. Imports System.Reflection
    2. Public Class Form1
    3. Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    4. NotifyIcon1.ContextMenuStrip = ContextMenuStrip1
    5. Dim mi As MethodInfo = GetType(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance Or BindingFlags.NonPublic)
    6. mi.Invoke(NotifyIcon1, Nothing)
    7. End Sub
    8. End Class


    du könntest dann noch abfragen, ob die linke oder die rechte maustaste gedrückt wurde (MouseUp gebrauchen) und jeweils ein anderes menü anzeigen lassen

    du kannst ja einfach nur ein neues notifyicon machen, welches nur für die funktion benutzt wird
    kannst auch mit

    Quellcode

    1. dim icon as new notifyicon

    arbeiten
    Das Contextmenu zeigt er jetzt an, aber das Problem mit der Taskleiste besteht immer noch:

    VB.NET-Quellcode

    1. Dim icon As New NotifyIcon
    2. icon.ContextMenuStrip = Auswahl_menu
    3. Dim mi As Reflection.MethodInfo = GetType(NotifyIcon).GetMethod("ShowContextMenu", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
    4. mi.Invoke(icon, Nothing)
    also, ich habs noch mal mit nem NotifyIcon (NotifyIcon2) aus der Toolbox probiert, dessen ContextmenuStrip ich auf "auswahl_menu" gestellt hab. dann hab ich diesen code genommen:

    VB.NET-Quellcode

    1. Dim mi As Reflection.MethodInfo = GetType(NotifyIcon).GetMethod("ShowContextMenu", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
    2. mi.Invoke(NotifyIcon2, Nothing)


    zeigt er wieder in der Taskleiste an. aber jetzt kommts :D: wenn ich den NotifyIcon1 nehme, der sichtbar ist (notifyicon2 ist nicht sichtbar) und das mit dem code mache, zeigt er es nicht in der taskleiste an. So, jetzt hab ich mal NotifyIcon2 auf "Visible=True" gesetzt und siehe da: es zeigt den Contextmenustrip nicht mehr in der taskleiste an.

    Es kommt also darauf an, ob das NotifyIcon sichtbar ist (Visible = True); dann zeigt er es nicht in der taskleiste an. wenn es aber nicht sichtbar ist (Visible=False), zeigt er es in der Taskleiste an. Jetzt habe ich mein Problem einfach so gelöst, dass ich den ContextmenuStrip vom NotifyIcon1 wenn das Programm läuft immer auf auswahl_menu stelle, weil sonst bräuchte ich ja 2 NotifyIcons.