2016-03-21 7 views
2

Derzeit läuft mein Programm einwandfrei, meine einzige Beschwerde ist es hat diese riesigen Switch-Anweisungen mit 5 Zeilen Code, in einer Zeile. Es sieht klebrig aus und es ist schwer zu lesen. Aber ich möchte nicht 50 Zeilen Code für meine switch-Anweisung durchblättern.Gibt es eine einfachere Möglichkeit, eine Liste von Variablen in C# Buttons, Checkboxen, Labels

Ich frage mich, ob ich meine Knöpfe, Kontrollkästchen oder Etiketten beschriftete, wenn ich etwas wie ein Array machen könnte, um die aktuelle Nummer zu sein; wie checkbox1 wäre checkbox2 das Kontrollkästchen [1] und das Kontrollkästchen [2]. Das funktioniert jetzt nicht, also suche ich nach einem Workaround dafür. Ich würde wirklich gerne eine For-Schleife benutzen, wenn es möglich wäre, weil das gleiche Ding 10 mal zu schreiben sehr mühsam und viel zeitaufwendiger ist als ich es gerne hätte.

Unten ist wie meine switch-Anweisung aussieht.

switch (currentProblem){ 
    case 1: problem1.Text = (num1 + sign + num2).ToString(); break; 
    case 2: problem2.Text = (num1 + sign + num2).ToString(); problem2.Visible = true; c2.Visible = true; answer2.Visible = true; break; 
    case 3: problem3.Text = (num1 + sign + num2).ToString(); problem3.Visible = true; c3.Visible = true; answer3.Visible = true; break; 
    case 4: problem4.Text = (num1 + sign + num2).ToString(); problem4.Visible = true; c4.Visible = true; answer4.Visible = true; break; 
    case 5: problem5.Text = (num1 + sign + num2).ToString(); problem5.Visible = true; c5.Visible = true; answer5.Visible = true; break; 
    case 6: problem6.Text = (num1 + sign + num2).ToString(); problem6.Visible = true; c6.Visible = true; answer6.Visible = true; break; 
    case 7: problem7.Text = (num1 + sign + num2).ToString(); problem7.Visible = true; c7.Visible = true; answer7.Visible = true; break; 
    case 8: problem8.Text = (num1 + sign + num2).ToString(); problem8.Visible = true; c8.Visible = true; answer8.Visible = true; break; 
    case 9: problem9.Text = (num1 + sign + num2).ToString(); problem9.Visible = true; c9.Visible = true; answer9.Visible = true; break; 
    case 10: problem10.Text = (num1 + sign + num2).ToString(); problem10.Visible = true; c10.Visible = true; answer10.Visible = true; break; 
} 
switch (hiddenCurrentLabel.Text) 
{ 
    case "1": if (answer1.Text != "") { if (answer1.Text == hiddenAnswerLabel.Text) { c1.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); return; 
    case "2": if (answer2.Text != "") { if (answer2.Text == hiddenAnswerLabel.Text) { c2.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); return; 
    case "3": if (answer3.Text != "") { if (answer3.Text == hiddenAnswerLabel.Text) { c3.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); break; 
    case "4": if (answer4.Text != "") { if (answer4.Text == hiddenAnswerLabel.Text) { c4.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); break; 
    case "5": if (answer5.Text != "") { if (answer5.Text == hiddenAnswerLabel.Text) { c5.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); break; 
    case "6": if (answer6.Text != "") { if (answer6.Text == hiddenAnswerLabel.Text) { c6.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); break; 
    case "7": if (answer7.Text != "") { if (answer7.Text == hiddenAnswerLabel.Text) { c7.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); break; 
    case "8": if (answer8.Text != "") { if (answer8.Text == hiddenAnswerLabel.Text) { c8.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); break; 
    case "9": if (answer9.Text != "") { if (answer9.Text == hiddenAnswerLabel.Text) { c9.Checked = true; } addOne(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); break; 
    case "10": if (answer10.Text != "") { if (answer10.Text == hiddenAnswerLabel.Text) { c10.Checked = true; } getAverage(); } else { break; } t = int.Parse(hiddenCurrentLabel.Text); break; 
} 

Die zweite ist, wo es in einer for-Schleife hätte viel Zeit gespeichert haben.

+0

[Verwandte oder duplizieren] (http://stackoverflow.com/q/36045587/ 993547). –

+0

Danke Patrick, ich muss das versuchen. nicht genau, woran ich dachte, aber wenn es funktioniert, funktioniert es. ;) –

+0

Die Lösung ist die gleiche: iterieren Sie über ein Array und machen Sie damit etwas. Eine "if" -Anweisung könnte in Ihrem Fall tun. –

Antwort

1
public void ActivateCurrentProblem(int i){ 
      Textbox problem = Controls.Find("problem" + i, true); 
      Textbox answer = Controls.Find("answer" + i, true); 
      CheckBox c = Controls.Find("c" + i, true); 
      problem.Text =(num1 + sign + num2).ToString(); 
      problem.Visible=true; 
      answer.Visible=true; 
     if (answer.Text == hiddenAnswerLabel.Text) 
     { 
      c.Checked = true; 
      addOne(); 
     } 
     t = int.Parse(hiddenCurrentLabel.Text); chooseRandoms(t); 
    } 

Und die Nutzung:

ActivateCurrentProblem(3); 

, oder Sie ein Array verwenden können:

Textbox[] txt = new Textbox[10]; 
for(int i=0;i<10;i++){ 
    txt[i] = new Textbox(){ 
     Location =new Point(0, i*40), //values are just examples 
     Visible= true, 
     .... 
    }; 
    Controls.Add(txt[i]); 
} 
+2

Eine nette Lösung. - Beachten Sie, dass dafür die Eigenschaft 'Name' der Steuerelemente aktiviert sein muss. Der Designer wird das standardmäßig tun, aber wenn sie dynamisch erstellt werden, liegt es in der Verantwortung des Coders, ihn auf den erwarteten Wert zu setzen.! – TaW

+0

... deshalb bevorzuge ich ein Array darüber. –

+0

Wenn ich das richtig lese, wird der Variablenname meiner Textboxen mit "Problem" + i verglichen. Wo, wenn ich 1 wäre, würde es das Problem als Problem1 sehen oder ist mein Verständnis fehlerhaft? Wenn das der Fall ist, könnte es eine kürzere, aber mehr verworrene (für mich) Art sein, eine provisorische Anordnung zu machen. Würde es so machen, ich muss nicht schreiben "{problem1, problem2, problem3, problem4, problem5, problem6, problem7, problem8, problem9, problem10};' um die Variablennamen zu erstellen –

Verwandte Themen