user1672517
user1672517

Reputation:

How to connect text change event in multiple text boxes to a single method (C#)?

When I double click on my text boxes in the designed, it creates a method auto-magically for me. Since I wish the same things to occur in any of the cases, I simply call an auxiliary method from each, like in the code below.

private void TextBox_1_TextChanged(object sender, EventArgs e)
{
  TextChanged();
}

private void TextBox_2_TextChanged(object sender, EventArgs e)
{
  TextChanged();
}

private void TextChanged(object sender, EventArgs e) { ... }

Now I'd like to know if there's a way (other than going into my design file (which, according to the information in it, shouldn't be attempted to) to connect the actions listeners to the same method and skip the detour via the automatically generated ones.

Upvotes: 2

Views: 5126

Answers (6)

Pushpendra
Pushpendra

Reputation: 538

Follow these steps:

  1. Go to the InitializeComponent().
  2. There are three events attached to each text box.

There you shoud be able to see the following.

this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
this.textBox2.TextChanged += new System.EventHandler(this.textBox2_TextChanged);

Replace this with

this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
this.textBox2.TextChanged += new System.EventHandler(this.textBox1_TextChanged);

And then remove the method below

private void TextBox_2_TextChanged(object sender, EventArgs e)
{
  TextChanged();
}

Upvotes: -1

Krzysztof Jabłoński
Krzysztof Jabłoński

Reputation: 1941

You could do it in designer view. Instead of double-clicking on an element - go to your buttons' properties, select events tab and then put a proper handler name for adequate event. Voila!

Upvotes: 0

Konrad Viltersten
Konrad Viltersten

Reputation: 39058

In the properties fold-out (most often to the right of your screen) you should have a thunder icon. That's where all the events are referable.

If you don't see the properties, select the regarded component (the text box in your case), right-mouse it and pick "properties" in the context menu.

Upvotes: 1

Alex
Alex

Reputation: 23300

I usually proceed like this in my projects, if controls are not going to change at runtime (i.e. if all controls in the form are added at design time):

// this is the container's ctor
public MyForm()
{
    TextBox1.TextChanged += new EventHandler(UniqueHandler);
    TextBox2.TextChanged += new EventHandler(UniqueHandler);
    ...
    TextBoxN.TextChange += new EventHandler(UniqueHandler);
}

void UniqueHandler(object sender, EventArgs e)
{
    TextBox source = (sender as TextBox);
    // handle the event!
}

If controls will change, it's actually quite similar, it just doesn't happen in the ctor but on-site:

// anywhere in the code
TextBox addedAtRuntime = new TextBox();
addedAtRuntime.TextChanged += new EventHandler(UniqueHandler);
MyForm.Controls.Add(addedAtRuntime);
// code goes on, the new textbox will share the handler

Upvotes: 3

ygssoni
ygssoni

Reputation: 7349

You can do it by this way:

 void btn1_onchange(object sender, EventArgs e)
  {
    MessageBox.Show("Number One");
  }

  void btn1_onchange2(object sender, EventArgs e){
    MessageBox.Show("Number Two");
  }

  public MyForm() {


    Button btn1 = new Button();
    btn1.Text = "Click Me";
    this.Controls.Add(btn1);

    btn1.TextChange += new EventHandler(btn1_onchange);
    btn1.TextChange += new EventHandler(btn1_onchange2);
  }

Upvotes: 0

asawyer
asawyer

Reputation: 17808

On the designer page go to the events tab, find the event you are looking for (TextChanged) and manually enter the name of the event handler you wish them all to use.

Upvotes: 3

Related Questions