当控件获取焦点时如何高亮显示?

4

当一个个体掩码文本框(MaskedTextBox)获得焦点时,我可以使用以下代码突出显示其文本:

this.myTextBox.SelectAll();

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

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

但是对于这个.ActiveControl,SelectAll不可用。有没有办法绕过它呢?

创建一个继承自文本框的用户控件,将其放置静态方法或属性上,从那里继续进行? - Trey
4个回答

4

sender 将成为该事件的目标。

您可以将 sender 转换为:

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

或者在 C# 7 中,

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

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


在第一个选项中,它会报错“无法将类型'System.Windows.Forms.MaskedTextBox'隐式转换为'bool'”。在第二个选项中,它会导致3个错误,在MaskedTextBox结尾处出现“)预期”,在maskedTextBox结尾处出现“;预期”,在maskedTextBox结尾处出现“}预期”。 - itchibahn
在尝试了你的第一个选项后,我去掉了“if”条件,它居然成功了!!!非常感谢!!! - itchibahn
@itchibahn,我修复了条件 - 我的 JavaScript 已经显示出来了。 - Daniel A. White

1

将以下代码放在表单的构造函数中:

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

0
我发现另一种方法是通过创建或编辑继承自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(); };
    }
}

0

只需这样做:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接