2016-05-10 15 views
0

Ich habe Tonnen von dem Namen Buttons wie dieses x0y1Zugriff auf Variablen dynamisch in C#

Wie kann ich den Namen der Variablen dynamisch so greife ich konnte Schleife alle Namen von xiy1 oder so.

in PHP wäre es wie ${"myString" . $randomvar}

ich keine Liste oder Array, da die auf die Schaltfläche bereits definiert existieren durch die XAML

+0

Sie fragen nach C# oder PHP? – Mostafiz

+1

C#, ich machte nur ein Beispiel, weil ich weiß, wie es in PHP gemacht wird – gempir

+0

Warum? Ist der Name des Knopfes wichtig? Nein! Ich vermute, du möchtest ein Klick-Ereignis erfassen. Habe ich recht? –

Antwort

0

Sie können

mit dieser Methode alle Textbox bekommen können
void AllTextBox(System.Windows.Forms.Control.ControlCollection ctrls) 
    { 
     foreach (Control ctrl in ctrls) 
     { 
      if (ctrl is TextBox) 
       { 
       if (ctrl.Name == "textBox1") 
       { 
        // do your stuf with textbox 
       } 

       } 
     } 
    } 
+0

Ich denke, das könnte eine Option sein. Aber das scheint ein bisschen nervig zu sein, weil ich ein extra Diktat erstellen muss und sogar einige Knöpfe ausschließen muss, weil ich nicht alle will. Gibt es keine Möglichkeit, dynamisch auf sie zuzugreifen? – gempir

+0

Sie müssen das Wörterbuch nicht selbst erstellen, Sie sollten in der Lage sein, eine Liste von Steuerelementen zu erhalten, die an ein Panel oder ähnliches angeschlossen sind. Verwenden Sie das System, wenn Sie wissen, welche übergeordneten Panels Sie ändern möchten, können Sie die untergeordneten Steuerelemente iterieren – Draken

+0

@Draken Sie sind richtig, können Sie Textfeldnamen mit meinem aktualisierten Code und gelten nur für einige der Textbox – Mostafiz

1

können Sie verwenden:

var textbox = 
    this.Controls.OfType<TextBox>().Where(txb => txb.Name == "myString").FirstOrDefault(); 

dies als Sie befinden sich im Kontext Ihres Formulars (this.Controls).

Und natürlich nicht vergessen using System.Linq; hinzufügen ...

+0

Ich bin im Hauptfenster: Window-Klasse, aber ich bin es ist nicht der richtige Kontext scheint. – gempir

+0

bitte erklären. Was ist der Fehler, den Sie bekommen? –

+0

mein Programm enthält keine Definition für "Controls" Ich übersetzte, weil seine Deutsch – gempir

0

Sie Funktion erstellen können, die Kontrolle zurückgeben namentlich:

Control GetControlByName(string Name) 
{ 
    foreach(Control control in this.Controls) 
     if(c.Name == Name) return control ; 

    return null; 
} 

oder Funktion mit einer bestimmten Steuerung wie folgt aus:

Button GetButtonByName(string Name) 
{ 
    foreach (Control c in this.Controls.OfType<Button>()) 
     if (c.Name == Name) return c; 

    return null; 
} 
0

für WPF-Projekt ...

Nehmen wir an, Sie haben ein Raster namens MyGrid und es gibt viele Schaltflächen darauf. Sie möchten die Schaltfläche verweisen x0y1 genannt:

var btn = MyGrid.Children.OfType<Button>().Where(x=>x.Name=="x0y1"); 

Hinweis: oben Code für flache Struktur (eine Ebene tiefer nur) funktionieren sollte.

Sie können das gleiche erreichen, indem in diesem Thread bereitgestellt Code verwendet: How can I find WPF controls by name or type?

0

Nur Findnamen nennen ("element"). FindName durchsucht alle untergeordneten Elemente eines FrameworkElement. Um auf eine beliebige Schaltfläche als String in einem Fenster zuzugreifen, rufen Sie die Methode FindName() des Fensters auf!

Wenn Ihr Code in einer Klasse ist aus Fenster erben, verwenden Sie einfach:

Button button = (Button)FindName("xiy1"); 

Wenn Sie den Code in eine Klasse schreiben nicht aus Fenster erben aber Framework, was unwahrscheinlich ist, zu verwenden:

Window window = Window.GetWindow(this); 
Button button = (Button)window.FindName("xiy1"); 

Weitere Informationen zu Einschränkungen finden Sie in der MSDN-Dokumentation zu Namescopes.

Verwandte Themen