如何为所有文本框具有特定用途的公共子?

时间:2011-05-22 15:02:00

标签: c# .net winforms c#-4.0 textbox

我在VS 2010中创建了一个C#WinForms应用程序。我有10个TextBox。

对于TextBox1,我按以下方式处理了GotFocusLostFocus等的事件:

this.richTextBox1.GotFocus += new System.EventHandler(this.RichTextBox1_GotFocus);
this.richTextBox1.LostFocus += new System.EventHandler(this.RichTextBox1_LostFocus);

private void TextBox1_GotFocus(object sender, System.EventArgs e)
{
    TextBox1.BackColor = Color.White;
}

private void TextBox1_LostFocus(object sender, System.EventArgs e)
{
    TextBox1.BackColor = Color.LightSteelBlue;
}

现在我需要为我的所有文本框编写相同的代码。是否可以为所有文本框都有一个共同的GotFocusLostFocus等事件处理程序方法来执行上述操作?

3 个答案:

答案 0 :(得分:3)

如果你真的需要10个不同的文本框,那么 best (以及大多数面向对象)的事情就是创建自己的自定义文本框控件,它继承自System.Windows.Forms.TextBox

由于您继承自基类TextBox类,因此您可以免费获得其所有功能,并且还可以实现所需的自定义行为。然后只需使用此自定义控件作为标准文本框控件的替代品,无论您希望控件在窗体上具有此行为。这样,您根本不需要附加任何事件处理程序!这种行为是建立在您的控制之上的,遵循封装准则,不要重复自己。

示例类:

public class FocusChangeTextBox : TextBox
{
    public FocusChangeTextBox()
    {
    }

    protected override void OnGotFocus(EventArgs e)
    {
        // Call the base class implementation
        base.OnGotFocus();

        // Implement your own custom behavior
        this.BackColor = SystemColors.Window;
    }

    protected override void OnLostFocus(EventArgs e)
    {
        // Call the base class implementation
        base.OnLostFocus();

        // Implement your own custom behavior
        this.BackColor = Color.LightSteelBlue;
    }
}

答案 1 :(得分:2)

当然:
只需制作“普通”方法GotFocus,LostFocus等,让所有文本框的事件调用这些方法。


修改

好的,你在这里:

private void Form1_Load(object sender, EventArgs e)
{
    this.textBox1.GotFocus += new System.EventHandler(this.AllTextBoxes_GotFocus);
    this.textBox2.GotFocus += new System.EventHandler(this.AllTextBoxes_GotFocus);

    this.textBox1.LostFocus += new System.EventHandler(this.AllTextBoxes_LostFocus);
    this.textBox2.LostFocus += new System.EventHandler(this.AllTextBoxes_LostFocus);
}

private void AllTextBoxes_GotFocus(object sender, System.EventArgs e)
{
    if (sender is TextBox)
    {
        ((TextBox)sender).BackColor = Color.White;
    }
}

private void AllTextBoxes_LostFocus(object sender, System.EventArgs e)
{
    if (sender is TextBox)
    {
        ((TextBox)sender).BackColor = Color.LightSteelBlue;
    }
}

GotFocus只有一种方法,LostFocus只有一种方法 有两个文本框,两个事件都调用相同的GotFocus和LostFocus方法 GotFocus和LostFocus方法引用了谁调用它们(第一个参数“sender”,因此他们知道要更改哪个文本框。

答案 2 :(得分:1)

您可以创建自定义文本框并使用它而不是为每个文本框复制相同的处理调用。 请看一下这个link的相似想法。