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

jutyujz0  于 2022-11-16  发布在  其他
关注(0)|答案(4)|浏览(225)

我可以在单个MaskedTextBox获得焦点时突出显示其中的文本,方法是:

this.myTextBox.SelectAll();

但是,我希望在鼠标单击事件发生时为所有MaskedTextBox执行此操作。我希望选择所有MaskedTextBox并使用一个事件方法来处理它,而不是为每个MaskedTextBox添加30个单独的事件方法,即:

private void MouseClickedForMaskedTextBox(object sender, MouseEventArgs e)
{
    this.ActiveControl.SelectAll();
}

但SelectAll不适用于此ActiveControl。是否有解决方法?

a0zr77ik

a0zr77ik1#

sender将成为事件的目标。
您可以将sender

MaskedTextBox maskedTextBox = sender as MaskedTextBox;
if (maskedTextBox != null) { maskedTextBox.SelectAll(); }

或者在C#7中,

if (sender is MaskedTextBox maskedTextBox) 
{
    maskedTextBox.SelectAll();
}

另一个改进是使用TextBoxBase,它也可以与TextBoxRichTextBox一起使用。

ar7v8xwq

ar7v8xwq2#

将下列程式码放入表单的建构函式中:

foreach (Control c in Controls)
        {
            if (c is TextBox)
            {
                TextBox tb = c as TextBox;
                tb.GotFocus += delegate { tb.SelectAll(); };
            }
        }
khbbv19g

khbbv19g3#

只需这样做:

private void maskedTextBox1_Enter(object sender, EventArgs e)
{
   this.BeginInvoke((MethodInvoker) delegate() {
   maskedTextBox1.SelectAll();
   });
}
taor4pac

taor4pac4#

我找到了另一种方法,通过创建或编辑继承MaskedTextBox的用户控件。在设计器中,您将属性“OnEnterSelectAll”设置为true。

public partial class MaskedTextBoxX : MaskedTextBox
{
    public MaskedTextBoxX()
    {
        InitializeComponent();
        Inicializar();
        }

    // ===============================
    // Campos Añadidos
    // ===============================

    public bool OnEnterSelectAll { get; set; } = false;

    // ===============================
    // Metodos
    // ===============================

    private void Inicializar()
    {
        // *** SELECCIONAR TODO el MarkedTextBox
        Click += delegate { if (OnEnterSelectAll) SelectAll(); };
    }
}

相关问题