Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to handle a group of textbox/label in an array

Tags:

c#

winforms

I have a serie of textboxes and labels form textbox 1-9 and label 1 to 9. With a click on a any label I clear the correspondant textbox.

I created a methode but it's like a baby toy comparison to my procedures in TP or VB. There must be a shortest well structered way. Any idea wiil be very much appreciated?

What I did :)))

    private void label1_Click(object sender, EventArgs e)
    {
        textBox1.Text = "" ;
    }
    private void label2_Click(object sender, EventArgs e)
    {
        textBox2.Text = "" ;
    }
    private void label3_Click(object sender, EventArgs e)
    {
        textBox3.Text = "" ;
    }
    private void label4_Click(object sender, EventArgs e)
    {
        textBox4.Text = "" ;
    }
    private void label5_Click(object sender, EventArgs e)
    {
        textBox5.Text = "" ;
    }
    private void label6_Click(object sender, EventArgs e)
    {
        textBox6.Text = "" ;
    }
    private void label7_Click(object sender, EventArgs e)
    {
        textBox7.Text = "" ;
    }
    private void label8_Click(object sender, EventArgs e)
    {
        textBox8.Text = "" ;
    }
    private void label9_Click(object sender, EventArgs e)
    {
        textBox9.Text = "" ;
    }
like image 297
Ismail Gunes Avatar asked Dec 05 '25 13:12

Ismail Gunes


1 Answers

You can utilize Tag property to mark controls. Then you can iterate through them (preferably starting from most parent control - form and with the use of recursion! or, if you are sure, from the container, which holds the group of controls).

// assign tag "1" to "9" to labels and texboxes
// subscribe all labels to same event label_Click
private void label_Click(object sender, EventArgs e)
{
    string id = (sender as Control).Tag.ToString();
    // iterate or recurse
    FindTextboxWithId(id).Clear();
}
// it shouldn't be hard to write FindTextboxWithId

Other possibility is to create private arrays of controls, in the form constructor, just to ease referencing them.

public TextBox[] _textBox;

public Form1()
{
    InitializeComponent();
    _textBox = new TextBox[] {textBox1, texBox2, ..., textBox9};
}

// assign tag "0" to "8" to labels and texboxes
// subscribe all labels to same event label_Click
private void label_Click(object sender, EventArgs e)
{
    int index = int.Parse((sender as Label).Tag);
    _textBox[index].Clear();
}

Third possibility is to utilize containers, to example, TableLayoutPanel. You can create 2 column container where first column is Label's and second is TextBox'es. Then just fill 9 rows and have fun in OnClick (to find sender position, to find texbox position, to find textbox and to finally clear it).

like image 190
Sinatr Avatar answered Dec 08 '25 16:12

Sinatr



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!