2013-10-10 5 views
5

Ich benutze Devexpress PopupMenu um auf Rechtsklick zu zeigen. Jetzt möchte ich vor dem Schließen dieses Popup-Menüs wissen, genau wie Windows ContextMenu Closing-Ereignis.PopupMenu PopupMenu Closing Event wie Windows Contextmen Closing Event

PopupMenu hat ein Closeup-Ereignis, das aber nach dem Schließen ausgelöst wird. Eigentlich ist es mein Ziel zu handhaben, wann das Popup-Menü situationsbezogen zu schließen ist.

Gibt es trotzdem, kann ich es erreichen?

+0

Ich habe die Dokumentation überprüft, Sie haben Recht - kein Ereignis existiert für das, wonach Sie suchen. +1 für eine gute Frage. Habe ich Recht, wenn ich sage, dass Sie kurz gesagt verhindern wollen, dass der Benutzer das Kontextmenü schließt, bis Ihr Code es zulässt? –

+0

Hallo DeeMac, ja, ich möchte das gleiche. aber jetzt nicht in der Lage. Ich habe auch versucht, alle virtuellen Mitglieder zu überprüfen, aber keinen Erfolg. –

Antwort

2

Ich fand dieses previous issue - jemand das Gleiche mit XtraBars.PopupMenu zu tun versucht und hatte eine Unterklasse von BarManager und überschreibt das BarSelectionInfo.ClosePopup Ereignis erstellen (vielleicht können Sie es zu Ihrem Szenario anzupassen). Das Beispielprojekt ist dem Problem beigefügt und zeigt die Auswahl eines Datums im Popup-Menü und im geöffneten Menü an.

EDIT:

Hier ist der entsprechende Code auf Vollständigkeit - immer dann, wenn das Popup über ist, ClosePopup Brände, wie pro docs schließen für BarManager:

Wenn Sie einen BarManager auf einem Formular platzieren zur Entwurfszeit, alle Steuerelemente veröffentlichen die PopupContextMenu Extender-Eigenschaft (die Beschriftung im Eigenschaftenfenster sieht aus wie 'PopupContextMenu auf barManager1')

Sie können das Kontextmenü mithilfe dieser Eigenschaft zuweisen und die Überschreibung implementieren.

Im Beispiel kehren Sie von der Methode basierend auf einer Bedingung zurück (Abbruch des Ereignisses) - in diesem Fall wird das Tag der Leiste bei einem Ereignis im Formular auf False gesetzt und in der Überschreibung geprüft.

 private void barEditItem1_EditValueChanged(object sender, EventArgs e) { 
      popupMenu1.Manager.Bars[0].Tag = false; 
     } 

     using DevExpress.XtraBars; 
     using DevExpress.XtraBars.ViewInfo; 

     public class MyBarManager : BarManager { 
      protected override BarSelectionInfo CreateSelectionInfo() { 
       return new MyBarSelectionInfo(this); 
      } 
     } 

     public class MyBarSelectionInfo : BarSelectionInfo { 
      public MyBarSelectionInfo(BarManager manager) 
       : base(manager) { 
      } 

      public override void ClosePopup(IPopup popup) { 
       if (!(bool)Manager.Bars[0].Tag) { 
        Manager.Bars[0].Tag = true; 
        return; 
       } 

       base.ClosePopup(popup); 
      } 
     }