C# 如何为所有文本框指定特定用途的通用Sub?

C# 如何为所有文本框指定特定用途的通用Sub?,c#,.net,winforms,c#-4.0,textbox,C#,.net,Winforms,C# 4.0,Textbox,我正在VS2010中创建一个C#WinForms应用程序。我有10个文本框 对于TextBox1,我以以下方式处理GotFocus、LostFocus等事件: this.richTextBox1.GotFocus += new System.EventHandler(this.RichTextBox1_GotFocus); this.richTextBox1.LostFocus += new System.EventHandler(this.RichTextBox1_LostFocus); p

我正在VS2010中创建一个C#WinForms应用程序。我有10个文本框

对于
TextBox1
,我以以下方式处理
GotFocus
LostFocus
等事件:

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;
}
现在我需要为我所有的文本框编写相同的代码。是否可以使用通用的
GotFocus
LostFocus
等事件处理程序方法来处理所有文本框的上述操作?

当然:
只需将“普通”方法设置为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”),因此它们知道要更改哪个文本框。

当然:
只需将“普通”方法设置为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”),因此它们知道要更改哪个文本框。

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

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

如果你真的需要10个不同的文本框,最好(也是最面向对象的)方法是创建你自己的自定义文本框控件,该控件继承自

由于您是从基本的
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;
    }
}

如果你真的需要10个不同的文本框,最好的(也是最面向对象的)方法是创建你自己的自定义文本框控件来继承

由于您是从基本的
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;
    }
}

如果只将事件处理程序方法附加到
TextBox
控件,则没有理由检查
sender
参数。也没有理由需要声明不同的处理程序方法。他可以在问题中使用完全相同的代码。秘密在于添加事件处理程序的
+=
语法。答案可能是b简单得多。如果只将事件处理程序方法附加到
文本框
控件,则没有理由检查
发送方
参数。也没有理由需要声明不同的处理程序方法。他可以在问题中使用完全相同的代码。秘密在于添加事件处理程序的
+=
语法答案可能简单得多。