C# 如何为所有文本框指定特定用途的通用Sub?
我正在VS2010中创建一个C#WinForms应用程序。我有10个文本框 对于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
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简单得多。如果只将事件处理程序方法附加到文本框
控件,则没有理由检查发送方
参数。也没有理由需要声明不同的处理程序方法。他可以在问题中使用完全相同的代码。秘密在于添加事件处理程序的+=
语法答案可能简单得多。