2016-12-05 1 views
0

Ich habe 12 Textfelder und 12 Etiketten in einer GroupBox.TextBox Event-Handler innerhalb GroupBox

Wenn ein Preis in einem der Textfelder eingegeben wird, möchte ich die Steuer berechnet und dann in der Beschriftung neben diesem Textfeld angezeigt.

Ich habe Code geschrieben, um die Steuer zu berechnen, aber es ist nur in der ersten Bezeichnung labelTax01 sichtbar.

Meine Codeliste ist wie folgt:

public void Form1_Load(object sender, EventArgs e)   
{ 
    foreach (Control ctrl in groupBoxPrice.Controls)    
    { 
     if (ctrl is TextBox) 
     { 
      TextBox price= (TextBox)ctrl; 
      price.TextChanged += new EventHandler(groupBoxPrice_TextChanged); 
     } 
    } 
}  

void groupBoxPrice_TextChanged(object sender, EventArgs e)  
{ 
    double output = 0; 
    TextBox price= (TextBox)sender; 

    if (!double.TryParse(price.Text, out output)) 
    { 
     MessageBox.Show("Some Error"); 
     return; 
    } 
    else 
    { 
     Tax tax = new Tax(price.Text);    // tax object 
     tax.countTax(price.Text);     // count tax 
     labelTax01.Text = (tax.Tax);    // ***help*** /// 
    } 
} 
+1

so dass jede Textbox eine Beschriftung daneben hat, richtig? – Badiparmagi

Antwort

3

Namen Etikett (zB LabelForPrice001, LabelForPrice002, etc ...), dann fügen Sie diesen Namen in der Tag-Eigenschaft eines jeden Preis Textbox in Desing Zeit.

An dieser Stelle die Textbox zu finden, bedeuten auch das dazugehörige Etikett mit einer einfachen Suche in der Controls-Auflistung des GROUPBOX finden ....

By the way, finden Sie sehr nützlich, Ihre Loops zu vereinfachen, die Erweiterung OfType

public void Form1_Load(object sender, EventArgs e) 
{ 
    foreach (TextBox price in groupBoxPrice.Controls.OfType<TextBox>())    
    { 
     price.TextChanged += new EventHandler(groupBoxPrice_TextChanged); 
    } 
} 

void groupBoxPrice_TextChanged(object sender, EventArgs e)  
{ 
    double output = 0; 
    TextBox price= (TextBox)sender; 

    if(!double.TryParse(price.Text, out output)) 
    { 
     MessageBox.Show("Some Error"); 
     return; 
    } 
    else 
    { 
     Tax tax = new Tax(price.Text);    
     tax.countTax(price.Text);     

     // retrieve the name of the associated label... 
     string labelName = price.Tag.ToString() 

     // Search the Controls collection for a control of type Label 
     // whose name matches the Tag property set at design time on 
     // each textbox for the price input 
     Label l = groupBoxPrice.Controls 
           .OfType<Label>() 
           .FirstOrDefault(x => x.Name == labelName); 
     if(l != null) 
      l.Text = (tax.Tax);     
    } 
} 
+0

das, was ich genau posten würde. Gut gemacht! – Badiparmagi