如何在获得焦点时突出显示控件?

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,它也适用于 TextBoxRichTextBox

将以下代码放入窗体的构造函数中:

        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();
   });
}