我的表单有以下代码:
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个单独事件?
答案 0 :(得分:2)
在您的Designer视图中,选择每个文本框并将Enter
和Leave
事件设置为指向每个文本框的单个实现。
然后你可以这样做:
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;
}