2016-04-27 9 views
0

Ich habe eine einfache Anwendung, in der ich alle Menüpunkte hinzugefügt habe, aber sie sind ausgeblendet und deaktiviert. Nach Benutzeranmeldungen muss ich einige von ihnen basierend auf Benutzer aktivieren. Dafür habe ich menuitem.Find (key, true) -Funktion verwendet, um alle Kinder zu suchen, aber es funktioniert nur für 2 Elemente, Ruhe wird nicht gefunden. Unten ist mein Code.winforms menueitem.items.find funktioniert nicht richtig

ToolStripItem[] items= this.menuStrip.Items.Find(row[0].ToString(), true); 

hier row [0] enthält Namen von Menüpunkten.

Ich dachte, es gibt einige Unterschiede in der Deklaration dieser Menüpunkte, aber sie sind gleich. Sie wissen nicht, warum es wie dieser :(verhält

EDIT:.

nachdem er vishakh antworten, ich will es machen Klarstellung hier, dass diese Zeile Code in einer Schleife und Variable „Reihe“ ist, bevölkerte vor dieser Zeile neuen Wert zu erhalten gesucht werden. unter kürzerem Code erneut für die Klarstellung.

foreach(var row in dtNames.Rows) 
{ 
    ToolStripItem[] items= this.menuStrip.Items.Find(row[0].ToString(), true); 
    items[0].visible=true; 
} 

wo erste Spalte jeder Zeile Namen menuitem enthält.

+0

Eine Möglichkeit, diese Situation zu vermeiden, können alle Menüpunkte durchlaufen sein und dann Unterpunkte und sehen, ob ihr Name mit Schlüssel übereinstimmt und es dann sichtbar machen, aber ich möchte wissen, warum finden Funktion nicht ordnungsgemäß funktioniert. – Kashif

Antwort

0

um dies zu erreichen Sie das bekommen müssen Gesamtzahl der Elemente in der Liste und iterieren t Durch die Liste. Oder verwenden Sie die foreach-Anweisung.

Für zB:

int count = listitems.Count; 
ToolStripItem[] items; 
for(int I = 0; i< count; i++) 
{ 
Items.Add(this.menuStrip.Items.Find(row[i].ToString(), true)); 
} 

EDIT:

aus dem Code ist zu sehen, dass Sie die Liste innerhalb der foreach-Schleife initialisiert wird. Vor der Schleife initialisieren. Fügen Sie außerdem jedes Element zur Liste hinzu. Sie können nur einen Artikel gemäß Ihrem Code erhalten.

Ihre Frage ist nicht klar.

Versuchen Sie es.

ToolStripItem[] items; 
foreach(var row in dtNames.Rows) 
{ 
    items.Add(this.menuStrip.Items.Find(m => m.Property.equals(row[0].ToString()))); 
} 
+0

Ich bin bereits durch eine Liste iterieren und aber meine Frage ist nicht, wie man durch eine Liste iterieren. Problem ist, dass der Aufruf von this.menuStrip.Items.Find (row [i] .ToString(), true) null für alle Elemente außer zwei zurückgibt. – Kashif

+0

Ich bin mir nicht bewusst, was Sie wirklich brauchen. wie auch immer ich bearbeitet habe. Bitte überprüfe. – ViVi

+0

Mein Problem ist, dass Items.Find nicht richtig funktioniert. Bei einigen Werten wird das Ergebnis angezeigt, bei anderen sogar null, obwohl sie darin enthalten sind. – Kashif