2016-09-20 6 views
0

Ich habe mich umgesehen und ich habe wirklich nichts Bedeutendes gefunden.C# iterieren durch die Groupbox selbst

was ich versuche zu tun, ist Wechsel zwischen Gruppenboxen mit einem Klick auf eine Schaltfläche.

Was ich habe, ist ein Windows-Formular mit 32 Groupbox-Containern und es gibt 12 Textfelder in jedem, einige der Textfelder erhalten eine Nummer, der Rest wird leer bleiben; Jetzt, wo der folgende Code funktioniert und ich konnte kopieren und 31 weitere Male einfügen:

foreach (TextBox x in GROUPBOX1.Controls.OfType<TextBox>()) 
     { 
      int A1 = 0; 
      int.TryParse(x.Text, out A1); 
      TOTAL += A1; //defined outside of the method 
     } 

Wo es alle Textfelder in GROUPBOX1 prüft und fügt alle diejenigen mit Werten in zusammen und ignoriert die leere Textfelder.

, was ich tun möchte, an dem Klick auf eine Schaltfläche, ist int GP =1 von +1 zu erhöhen und damit zur nächsten groupbox und seine Reihe von Textbox zu bewegen, so dass ich den Code in der foreach Schleife wiederverwenden kann, suchen so etwas wie dieses:

foreach (TextBox x in GROUPBOX+GP+.Controls.OfType<TextBox>()) 
     { 
      int A1 = 0; 
      int.TryParse(x.Text, out A1); 
      TOTAL += A1; //defined outside of the method 
     } 

wo +GP+ würde repräsentieren die int GP =1 und seine nachfolgenden Schritten.

jetzt habe ich die Idee ab: this.Controls["GROUPBOX"+box_number].Controls["LABEL"+label_prefix+"_"+label_number+"_LBL"].Text = valueToDisplayInLabel.ToString();

, die (mit dem entsprechenden int zugewiesen) Werte auf bestimmte Etiketten in verschiedenen Gruppenfeldern zuordnet. kann dies auf diese Weise getan werden? Alle Gruppen- und Textboxen wurden bereits erstellt.

was ich versuche zu erreichen ist, die Textfelder, die eine Nummer erhalten, werden alle zusammen addiert und dieser Wert wird dann in einer Datenbank gespeichert sowie zu allen anderen "Summen" hinzugefügt und auch in einem gespeichert Datenbank.

foreach(GroupBox gb in Controls.OfType<GroupBox>()) 
    { 
     foreach(TextBox tb in gb.Controls.OfType<TextBox>()) 
     { 
      int A1 = 0; 
      int.TryParse(tb.Text, out A1); 
      TOTAL += A1; //defined outside of the method 
     } 
    } 

funktioniert dies sehr gut und alle, aber es tut mir erlauben, die Summen der kombinierten Textfelder pro Gruppenfeld zu bekommen, wie ich will, individuell jedes groupbox insgesamt speichern und sie zusammen zu einem späteren Zeitpunkt hinzufügen, wo Da dies alle Textfelder, die sich in Gruppenfeldern befinden, ablegt und sie in einer Liste ablegt, hat iv List<int> TOTAL = new List<int>(); und TOTAL.Insert(0, A1); hinzugefügt, um zu versuchen, dass dies für mich funktioniert, aber jetzt werden alle Textboxwerte in die Liste übernommen.

im, im Wesentlichen der Suche nach int GB1TOT, GB2TOT etc etc dann int TOTAL = GB1TOT + GB2TOT

Antwort

0

Ist das was du willst? Speichern Sie die Summe pro GroupBox in List GBtotal. Dann können Sie die Summe durch Summieren erhalten.

int Total; 
List<int> GBTotal = new List<int>() 
foreach(GroupBox gb in Controls.OfType<GroupBox>()) 
{ 
    int temp = 0; 
    foreach(TextBox tb in gb.Controls.OfType<TextBox>()) 
    { 
     int A1 = 0; 
     if(int.TryParse(tb.Text, out A1)) 
     { 
      temp += A1; 
     } 
    } 
    GBTotal.Add(temp); 
} 
Total = GBTotal.Sum(); 

können Sie

Total = GBTotal[0] + GBTotal[1] + .... 

Oder-Schleife verwenden technisch die Gesamt

+0

das ist eine sehr klare Erklärung, hat mir ziemlich geholfen. –

2

Verwenden zwei Schleifen?

 foreach(GroupBox gb in Controls.OfType<GroupBox>()) 
     { 
      foreach(TextBox tb in gb.Controls.OfType<TextBox>()) 
      { 
       int A1 = 0; 
       int.TryParse(tb.Text, out A1); 
       TOTAL += A1; //defined outside of the method 
      } 
     } 
+0

danken Ihnen zu bekommen, obwohl dies mich in die richtige Richtung hat es meine Frage vollständig didnt beantworten. +1 –