输入时更改文本框的BackColor

时间:2013-04-07 23:01:10

标签: c# visual-studio

我的表单有以下代码:

    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;
    }

我的表单上还有另外20个文本框,我想为此做同样的事情。是否可以将所有输入事件和所有休假事件组合在一起,这样我总共有两个事件而不是44个单独事件?

3 个答案:

答案 0 :(得分:2)

在您的Designer视图中,选择每个文本框并将EnterLeave事件设置为指向每个文本框的单个实现。

然后你可以这样做:

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;
}

此外,SelectAll不是必需的,因为您要设置整个文本框的背景颜色..而不是SelectionColor的{​​{1}}。

答案 1 :(得分:0)

只需使用以下内容:

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

将控件事件声明设置为指向此函数。

您也可以对Leave()事件执行相同的操作。

(请注意,我更倾向于在可能的情况下处理客户端这类事情。)

答案 2 :(得分:0)

您可以手动添加或迭代表单中的所有文本框(此处的扩展方法GetChildControls

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

可以从Form的Load事件中调用上面的内容。

现在,通过将发件人强制转换为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;
}