【问题标题】:How to highlight the control when it gets focus?获得焦点时如何突出显示控件?
【发布时间】:2017-03-15 19:10:46
【问题描述】:

当它获得焦点时,我可以突出显示单个 MaskedTextBox 中的文本:

this.myTextBox.SelectAll();

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

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

但是 SelectAll 不适用于 this.ActiveControl。有没有办法绕过它?

【问题讨论】:

  • 创建一个继承自文本框的用户控件,在其上放置一个静态方法或属性,从那里继续?

标签: c# winforms selectall


【解决方案1】:

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 的末尾。
  • 在玩了你的第一个选项之后,我删除了“if”条件,它起作用了!!!!非常感谢!!!!
  • @itchibahn 我解决了这个问题 - 我的 javascript 正在显示。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    只需这样做:

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

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 2016-04-07
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      相关资源
      最近更新 更多