2017-11-24 1 views
2

Ich habe ein Programm gemacht, das während der Ausführung Objektattribute ändern muss. Um für mich eine einfache Verwaltung zu haben, habe ich die Original-Objektnamen dh gehalten „button1“Referenzieren von Objekten mit einer Variablen (C#)

Meine Frage ist, ob es einen Weg gibt, Objektnamen von Variablen zu verweisen mit einer Schleife

I geändert werden Schreiben werden Sachen wie

private void disable() 
{ 
    this.button1.Visible = false; 
    this.button2.Visible = false; 
    this.button3.Visible = false; 
    //... 
} 

ich so etwas wie

arbeiten
int a; 
for(a=1;a==50;a++) 
{ 
    this.buttona.Visible =false; 
} 

, die offensichtlich nicht

habe versucht habe gehabt

Dann gibt es einen Weg, ich kann Objekt mit einer Variablen beziehen?

Vielen Dank im Voraus

+4

Arrays nachschlagen. – user3080953

+0

Sie können eine Liste erstellen und eine beliebige Schleife verwenden, um auf Ihre Objekte zu verweisen. –

+0

Erstellen Sie ein Array von Schaltflächen, und durchlaufen Sie sie dann mit einer Foreach-Schleife oder einer For-Schleife mit einer Indexvariablen. Außerdem würde ich empfehlen, Ihre Buttons richtig zu benennen - während ich verstehe, dass sie mit dem Standardnamen einfach sind, wird es Probleme auf der ganzen Linie verursachen, wenn Sie oder jemand anders Ihren Code pflegen müssen, wird die Wahrscheinlichkeit der Einführung von Bugs wesentlich erhöhen und ein paar andere lustige Sachen. – Diado

Antwort

5

Sie diesen Code verwenden können:

 foreach (var c in this.Controls) 
     { 
      if (c is Button button) 
       button.Visible = false; 
     } 

Oder diese:

 for (int i = 0; i < 50; i++) 
     { 
      var c = this.Controls["button" + i]; 
      (c as Button).Visible = false; 
     } 
+0

Ich erstelle Schaltflächen auf meinem Code mit: 'private Button button1 = new Button();' aber, wenn ich die Variable zuweisen mit: 'var c = this.Controls [" button "+ num.ToString()]; ' es gibt null zurück und erlaubt es mir nicht, es zu initialisieren:' this.Controls.Add (c as Button); 'oder ändere Eigenschaften mit:' (c as Button) .Location = new Point (30, 90) ; ' Fehle ich etwas mit Verweis oder was könnte los sein?Vielen Dank im Voraus @BrandonMinnick – Ypsok

+0

Haben Sie Button1 hinzugefügt, um die Formularsammlung zu steuern: this.Controls.Add (button1); Sind sie in dieser Liste? Haben Sie das Feld 'Name' festgelegt: button1.Name = 'button1'; ? – mrbm

0

Dies könnte nicht funktionieren, wenn Sie nicht UWP tun, WPF, usw. Wenn Sie UWP, WPF usw. verwenden, könnte dies hilfreich sein. Da alle diese Schaltflächen zu einem Panel gehören (nehme ich an), sollte das Kind oder der Inhalt des Panels ein IEnumerable Objekt sein, das von foreach Schleifen bearbeitet werden kann. Zum Beispiel, wenn ich die folgende XAML-Code:

<Grid x:Name="myGrid"> 
    <Button x:Name="Button1" Tag="myButton1"/> 
    <Button x:Name="Button2" Tag="myButton2"/> 
    <!-- ... --> 
</Grid> 

Ich kann die Tasten durchlaufen diese mit:

foreach(Button button in myGrid.Children){ 
    if(!button.Tag.StartsWith("myButton")) continue; 
    button.Visibility = Visibility.Collapsed; 
} 
Verwandte Themen