2009-06-03 8 views
1

Ich habe die Anforderung, den Kontextmenüstrip auszublenden, wenn ein bestimmtes Flag nicht gesetzt ist. Da ich nicht glaube, dass wir das Ein-/Ausblenden des Kontextmenüs explizit steuern können, habe ich mich entschieden, mit der rechten Maustaste auf das Steuerelement zu klicken, mit dem der Kontextmenustrip verknüpft ist. Es ist ein UserControl, also habe ich versucht, das MouseClick-Ereignis zu handhaben, in dem ich überprüfe, ob das Flag gesetzt ist und ob es sich um einen rechten Button handelt. Zu meinem Erstaunen wird das Ereignis jedoch nicht auf den Maus-Rechtsklick ausgelöst, sondern nur für den Linksklick ausgelöst.Explizit verhindern, dass ContextMenuStrip in C geladen wird #

Ist irgendetwas mit mir nicht in Ordnung oder gibt es einen Workaround?

RECHTS KLICK ERHÄLT GEFUNDEN, Frage Titel und eine Beschreibung Changed

Nach etwas mehr Forschung tun, ich erhielt den Rechtsklick zu schießen, wenn ich die Maus Runter Ereignis auf der Control bearbeiteter. Bin aber noch ahnungslos, wie man den ContextMenuStrip vom Laden explizit wie verhindert. Eine weitere Frage ist, warum MouseClick Right Button Click nicht erkannt hat?


aktuelle Problemumgehung

Registrieren der Ereignishandler

userControl1.Control1.MouseDown += new MouseEventHandler(Control1_MouseDown); 

void Control1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right && flag == false) 
     { 
      userControl1.Control1.ContextMenuStrip = null; 
     } 
     else 
     { 
      userControl1.Control1.ContextMenuStrip = contextMenuStrip1; 
     } 

    } 

dies ist die aktuelle Problemumgehung ich tue. Aber wie kann ich es in der Eröffnungsveranstaltung des ContextMenuStrip ändern

+0

Möglicher Postleitzahl? – NinethSense

+0

Was meinst du mit dem neu eingefügten "Loading" in deiner Frage? Meinst du das Erstellen der Instanz? Oder meinst du, wie es vorher schien, das Popup? – OregonGhost

+0

Auf dieser Seite http://msdn.microsoft.com/en-us/library/system.windows.forms.control.click.aspx finden Sie eine Beschreibung der Klickereignisse - es könnte erklären, warum Sie kein Recht bekommen click event – ChrisF

Antwort

2

Ihre Lösung wird trotzdem fehlschlagen, wenn das Kontextmenü mit der Kontextmenü Taste (oder wie es genannt wird) auf der Tastatur aufgerufen wird. Sie können das Ereignis Opening verwenden, um das Öffnen eines Kontextmenüs abzubrechen.

+0

Ich habe das Opening Event probiert, aber was ändere ich daran? Wie verhindere ich das Öffnen? –

+0

Sie könnten mit dem Lesen der Dokumente beginnen. Das Opening-Ereignis ruft einen CancelEventArgs-Parameter ab, bei dem Sie Cancel auf "True" setzen müssen, um das Öffnen abzubrechen. – OregonGhost

+0

Setzen Sie CancelEventArgs.Cancel auf true. – Ants

1

Es gibt eine Arbeit herum.

Lets Menüpunkt A setzt das Flag sagen, dass Sie das Kontextmenü in dem Click-Ereignis

für A auf Steuer B. steuert, setzen Sie b.ContextMenu = nichts, es auszuschalten, und legen Sie b.ContextMenu zurück um das Kontextmenü zu aktivieren, um es wieder einzuschalten.

+0

Klingt wie ein Hack für mich. Das macht es wirklich schwer zu pflegen, wenn Sie mehr als ein Steuerelement haben, das das Menü öffnen kann. – OregonGhost

0

In WinForms gibt es auch das Click Ereignis - das für einen rechten Mausklick ausgelöst wird. Wenn Sie WPF verwenden, sollten Sie MouseRightButtonDown und MouseRightButtonUp Ereignisse haben.

Schauen Sie sich die Tabelle MSDN page an, in der aufgeführt ist, welche Steuerelemente welche Klickereignisse auslösen. Bezeichnenderweise werden Button, CheckBox, RichTextBox und RadioButton (und ein paar andere) nicht ausgelöst und bei Rechtsklick ausgelöst.