0

I create an array of 16 text boxes, etc in code. I need to detect which one is clicked. I have created an event handler for each that points to the same handler routine for all 16

for(int box = 0; box < 16; box ++)
{
    txtArray[box].Click += new System.EventHandler(txtArray_n_Click);
}

There I get stuck trying to identify which one called the handler. Been reading up on Delegates, but I'm not sure which direction to travel from here. I could spend a lot of time on that path to no profit other than my own education!

Any pointers?

Edited by Dani: Formatting fixed

2
Contributors
2
Replies
3
Views
8 Years
Discussion Span
Last Post by Ken-Barrie
0

Hi, When create the textbox give unique name. And in Click event you receive the sender object, Typecast it to textbox and check the name you want.

Ex

TextBox[] textArray;
    public Form1()
    {
        InitializeComponent();
        textArray = new TextBox[10];
        for (int i = 0; i < 10; i++)
        {
            TextBox textBox = new TextBox();
            
            textBox.Name = "Name" + i ;
            textBox.Location = new Point(0, (i + 1) * textBox.Height);
            textArray[i] = textBox;
            textArray[i].Click += new EventHandler(ArrayOnClick);
            this.Controls.Add(textBox); 
        }
    }
private void ArrayOnClick(object sender, EventArgs e)
    {
        TextBox textBox =(TextBox) sender;
        MessageBox.Show(textBox.Name ); 
        switch ( textBox.Name ){
            case "Name0":
                //Code for Name0 TextBox
                
                break;
            case "Name1":
                //Code for Name1 TextBox
                break;

        }
    }
0

Yes. That will do nicely.

Your
textBox.Name = "Name" + i ;

becomes, for me
txtArray.Name = i.ToString();

[Shame on me. Why did I not think of giving them a name!]

Then I pick up your line in the handler

TextBox textBox =(TextBox) sender;

And I’m away, with a reference to which one is knocking at the door.

I was frustrated that the event handler did not pass me enough info in the Sender object or EventArgs to determine which control I was dealing with. I could determine the text in the box but not the name. IT HAD NO NAME.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.