Harry
Harry

Reputation: 33

Changing the BackColor of a textbox upon entry

I have the following code for my form:

    private void txt1_Enter(object sender, EventArgs e)
    {
        txt1.SelectAll();
        txt1.BackColor = Color.LightBlue;
    }

    private void txt2_Enter(object sender, EventArgs e)
    {
        txt2.SelectAll();
        txt2.BackColor = Color.LightBlue;            
    }

    private void txt1_Leave(object sender, EventArgs e)
    {
        txtThermalConductivity.BackColor = Color.White;
    }

    private void txt2_Leave(object sender, EventArgs e)
    {
        txtThermalConductivity.BackColor = Color.White;
    }

There are another 20 textboxes on my form that I would like to do the same for. Is it possible to combine all of the enter events and all of the leave events so I have two events in total rather than 44 individual events?

Upvotes: 2

Views: 10513

Answers (3)

heads5150
heads5150

Reputation: 7463

You could either add manually or iterate over all textboxes in form (extension method found here GetChildControls.

foreach (TextBox textBox in this.GetChildControls<TextBox>())
{
    textBox.Enter += new EventHandler(TextBox_Enter);
    textBox.Leave += new EventHandler(TextBox_Leave);
}

The above can be called from the Form's Load event.

The event listener now can look like the following by casting the sender to TextBox.

 private void TextBox_Enter(object sender, EventArgs e)
{
    TextBox txtBox = (TextBox)sender;
    txtBox .SelectAll();
    txtBox .BackColor = Color.LightBlue;            
}

private void TextBox_Leave(object sender, EventArgs e)
{
    TextBox txtBox = (TextBox)sender;
    txtBox.BackColor = Color.White;
}

Upvotes: 1

Mick Walker
Mick Walker

Reputation: 3847

It is, just use something like the following:

private void tbLeave(object sender, EventArgs e) {
((TextBox) sender).BackColor = Color.White;
}

The set the controls event declaration to point to this function.

You can also do the same for the Leave() event.

(Just a little note to say, I much prefer to handle this kind of thing client side where possible.)

Upvotes: 0

Simon Whitehead
Simon Whitehead

Reputation: 65087

In your Designer view, select each textbox and set the Enter and Leave events to point to a single implementation of each.

Then you can do this:

private void txt_enter(object sender, EventArgs e) {
    ((TextBox)sender).BackColor = Color.LightBlue;
}

private void txt_leave(object sender, EventArgs e) {
    ((TextBox)sender).BackColor = Color.White;
}

Also, SelectAll isn't required because you're setting the entire textbox's background color.. not the SelectionColor of a RichTextBox.

Upvotes: 4

Related Questions