2016-05-26 7 views
0

In Visual C++ MFC gibt es einen integrierten Mechanismus zum Festlegen der Menüelementstatus. Ich versuche, das Gleiche mit C# und einem WindowsForm-Objekt zu tun.Einstellen des Menüelementstatus auf einem MenuStrip

ich das gefunden, die nicht ganz das gleiche ist:

Grey out menustrip items when certain forms are open/active/focused

Hier ist meine Menüstruktur:

Sub menu

Also entschied ich mich, dies zu versuchen:

private void viewToolStripMenuView_Click(object sender, EventArgs e) 
{ 
    zoomExtentsToolStripMenuItem.Enabled = viewCtrl != null; 
} 

Es funktioniert irgendwie. Aber ich bin ein bisschen wählerisch. Ich kann das Menü mit dem Element angezeigt sehen aktiviert und dann Ich sehe es in deaktiviert ändern.

Was ist der richtige Weg, um die Menüelementzustände vor das Menü wird angezeigt? Ich weiß, das klingt wie ein einfaches Problem, aber ich kann nicht die entsprechende Methodik zu ON_UPDATE_COMMAND_UI finden.

+1

Mögliche Duplikat [UI-Objekte in Windows Forms aktualisiert] (http://stackoverflow.com/questions/2405592/updating-ui-objects-in-windows-forms) –

+0

@JohnnyMopp Das ist eine interessante Frage ist, und es sieht genauso aus, danke. Aber ich sehe keinen Hintergrund-Thread zum Aktualisieren der Benutzeroberfläche. Ich sollte in der Lage sein, es einfach als Enabled etc. zu setzen. Aber es ist die Auswahl der richtigen Event-Handler, um es zu tun. Es ist offensichtlich zu spät, es im Click-Event-Handler im Menü Ansicht zu tun. –

Antwort

1

Ich benutzte den falschen Event-Handler!

private void viewToolStripMenuView_DropDownOpening(object sender, EventArgs e) 
{ 
    zoomExtentsToolStripMenuItem.Enabled = viewCtrl != null; 
} 
+1

In der Tat ist dies ausreichend. Es gibt keinen Grund für einen Hintergrund-Thread. Dieser Code ist * viel * schneller als die kleinste Verzögerung, die ein menschlicher Benutzer wahrnimmt. Es ist moralisch gleichbedeutend damit, die WM_INITMENUPOPUP-Nachricht mit echten Menüs zu behandeln (anstatt der gefälschten, von Benutzern erstellten .NET-Dateien). –

Verwandte Themen