如何在获得焦点时突出显示控件?
How to highlight the control when it gets focus?
我可以在获得焦点时突出显示单个 MaskedTextBox 中的文本:
this.myTextBox.SelectAll();
但是,我想在发生鼠标单击事件时对所有 MaskedTextBox 执行此操作。我不想为每个 MaskedTextbox 添加 30 个单独的事件方法,而是 select 所有 MaskedTextBox 并有一个事件方法来处理它,即:
private void MouseClickedForMaskedTextBox(object sender, MouseEventArgs e)
{
this.ActiveControl.SelectAll();
}
但 SelectAll 不适用于 this.ActiveControl。有办法解决吗?
sender
将成为事件的目标。
你可以投 sender
:
MaskedTextBox maskedTextBox = sender as MaskedTextBox;
if (maskedTextBox != null) { maskedTextBox.SelectAll(); }
或者在 C# 7 中,
if (sender is MaskedTextBox maskedTextBox)
{
maskedTextBox.SelectAll();
}
另一个改进是使用 TextBoxBase
,它也适用于 TextBox
和 RichTextBox
。
将以下代码放入窗体的构造函数中:
foreach (Control c in Controls)
{
if (c is TextBox)
{
TextBox tb = c as TextBox;
tb.GotFocus += delegate { tb.SelectAll(); };
}
}
只需这样做:
private void maskedTextBox1_Enter(object sender, EventArgs e)
{
this.BeginInvoke((MethodInvoker) delegate() {
maskedTextBox1.SelectAll();
});
}
我可以在获得焦点时突出显示单个 MaskedTextBox 中的文本:
this.myTextBox.SelectAll();
但是,我想在发生鼠标单击事件时对所有 MaskedTextBox 执行此操作。我不想为每个 MaskedTextbox 添加 30 个单独的事件方法,而是 select 所有 MaskedTextBox 并有一个事件方法来处理它,即:
private void MouseClickedForMaskedTextBox(object sender, MouseEventArgs e)
{
this.ActiveControl.SelectAll();
}
但 SelectAll 不适用于 this.ActiveControl。有办法解决吗?
sender
将成为事件的目标。
你可以投 sender
:
MaskedTextBox maskedTextBox = sender as MaskedTextBox;
if (maskedTextBox != null) { maskedTextBox.SelectAll(); }
或者在 C# 7 中,
if (sender is MaskedTextBox maskedTextBox)
{
maskedTextBox.SelectAll();
}
另一个改进是使用 TextBoxBase
,它也适用于 TextBox
和 RichTextBox
。
将以下代码放入窗体的构造函数中:
foreach (Control c in Controls)
{
if (c is TextBox)
{
TextBox tb = c as TextBox;
tb.GotFocus += delegate { tb.SelectAll(); };
}
}
只需这样做:
private void maskedTextBox1_Enter(object sender, EventArgs e)
{
this.BeginInvoke((MethodInvoker) delegate() {
maskedTextBox1.SelectAll();
});
}