2010-11-18 13 views
2

Ich arbeite in Windows Forms in C#. Ich habe eine Methode, wo ich MenuItem s zum ContextMenu bin Hinzufügen und ich implementiert, um die Ereignishandler für die MenuItem s wie folgt:So behandeln Sie Menüeinträge in C# zum Übergeben von Werten

public void Form1_Load() 
{ 
    int index =0; 
    ArrayList ar = new ArrayList(); 
    ContextMenu cm = new ContextMenu(); 
    cm.Name = "Test"; 
    MenuItem mi = new MenuItem("All"); 
    mi.Click += new EventHandler(mi_All); 
} 
private void mi_All(object sender,EventArgs e) 
{ 
    //here I want to access the arraylist and integer specified in above method 
} 

Wie dies geschehen kann? Eine mögliche Lösung ist, die ArrayList und int als globale Variablen zu deklarieren, aber ich habe viele Variablen wie folgt. Wenn ich diesen Ansatz nehme, werden die Variablen leben, bis das Formular entsorgt wird. Das funktioniert also nicht. Gibt es einen anderen Weg, dies zu erreichen?

+0

Die Frage ist, warum tun müssen Sie die Array-Liste zugreifen? Erwägen Sie, die Eigenschaft tag des Menüelements für zusätzlichen Speicher zu verwenden. –

Antwort

3

Die MenuItem verfügt über eine Tag Eigenschaft, die verwendet werden kann, um beliebige benutzerdefinierte Informationen zuzuweisen. Ordnen Sie dem also alles zu, worauf Sie zugreifen müssen, wenn der Event-Handler aufgerufen wird. In Ihrem Beispiel würden Sie den Integer-Index des enu-Elements zuweisen und dann innerhalb des Event-Handlers diesen als Index in das ArrayList-Feld auf Formularebene verwenden.

4

Eine Option:

mi.Click += delegate (object sender, EventArgs e) { mi_All(sender, e, ar, index); }; 
... 
private void mi_All(object sender, EventArgs e, ArrayList ar, int index) 
{ 
    ... 
} 

Eine andere:

mi.Tag = new object[] { ar, index }; 
... 
private void mi_All(object sender, EventArgs e) 
{ 
    ArrayList ar = (ArrayList)((object[])((MenuItem)sender).Tag)[0]; 
    int index = (int)((object[])((MenuItem)sender).Tag)[1]; 
    ... 
} 
+0

Ich kann dies für den Zugriff tun. Danke für die Lösung. Ähnlich, wenn ich den Index, der in der Event-Handler-Methode aktualisiert werden soll, zurückgeben möchte, gibt es einen Weg dafür. Lass es mich wissen, bitte. – ASD

Verwandte Themen