C# Integer in String inkrementieren und diesen String als Aufruf nutzen

Tamron

Captain
Registriert
Juli 2011
Beiträge
4.072
Hallo Leute,

ich programmiere gerade ein kleines Lotto Projekt in c# mit WPF und komme einfach nicht weiter.

Ich habe auf meiner GUI 6 Buttons, die btTipp1 bis btTipp6 heißen und ich einen Inhalt in diese reinschreiben kann.
Dann habe ich noch 6 weitere Buttons in den die per Zufall ausgewählten Zahlen stehen, diese heißen btLotto1 bis btLotto6.

Ich möchte nun gerne den 6 Buttons die generierten Zahlen von einem Array zuweisen.
Code:
   btLotto1.Text = Convert.ToString(lottoSpiel[0]);
   btLotto2.Text = Convert.ToString(lottoSpiel[1]);
   btLotto3.Text = Convert.ToString(lottoSpiel[2]);
   btLotto4.Text = Convert.ToString(lottoSpiel[3]);
   btLotto5.Text = Convert.ToString(lottoSpiel[4]);
   btLotto6.Text = Convert.ToString(lottoSpiel[5]);

Schreit ja schon nach einem for-loop. Da dachte ich mir ich könnte so ungefähr z.B. btLotto1 inkrementieren, damit ich dann btLotto2 etc. habe. Ist das richtig so oder macht man das anders?
Code:
for (int i = 0; i < 6; i++)
     {
      tempString = "btLotto" + i + ".Text";
      }

Ich habe schon was von Reflektionen gelesen, aber das kling viel zu überdimensioniert.

Zudem möchte ich ja dann noch btLotto1.Text einen Wert zuweisen, der dann in dem Button steht.
Ich möchte ja den Inhalt des Strings als Variable wieder benutzen. Wie mache ich das dann?
 
In dem du die Buttons in eine entsprechende Collection packst, z.B. eine Liste. Dann kannst du über diese iterieren und den Text entsprechend setzen.
 
Lohnt sich eigentlich nicht für 6 Buttons. Es sei denn es sollen mal dynamisch mehr Buttons werden können.

Ich würde empfehlen die Buttons in eien Groupbox zu packen und dann mit foreach (Control ctrl in groupbox1.Controls) durchzuiterieren.
Für jedes Control müsste man dann mit GetType() ermitteln ob es sich um einen Button handelt, und wenn ja den Controlnamen abfragen. Da er auf eine Zahl endet, kann man dem Button dann die jeweilige Zahl an der richtigen Position des Arrays zuweisen.
 
Schau dir mal DataBinding an. Damit geht das sehr bequem, bis auf den Aufwand ein Property je Wert anzulegen und bei Änderung an das INotifyPropertieChanged Event zu denken :).
 
Du könntest die Buttons (die es betrifft) in eine z.B. GroupBox packen. Und dann wie folgt vorgehen:

Code:
foreach (Control control in groupbox.Controls)
{
    if (control is Button)
    {
        ...
    }
}

Voraussetzung ist, dass du die Reihenfolge der Definitionen im Designer beachtest damit sie auch nach der gewünscht Reihenfolge durchlaufen werden.

Edit: Ah @DocWindows Antwort übersehen :D.
 
Zurück
Oben