GotFocus上的MaskedTextBox.SelectAll不适用于鼠标

时间:2015-02-18 22:39:01

标签: c# .net winforms maskedtextbox

我想在控件上点击(或标签)时选择MaskedTextBox的所有内容,这样他们就可以轻松替换旧内容。我尝试在SelectAll()事件中调用Enter,但这根本不起作用。

我切换到使用GotFocus事件,这在通过控件进行选项卡时效果很好,但是当我用鼠标点击它时不起作用。我只想在第一次进入/聚焦控件时选择所有内容(后续点击可能用于定位光标以编辑现有文本)。

我添加了一个按钮并尝试在按钮点击事件中调用SelectAll(),但这也没有做任何事情。这是怎么回事?这是一个错误吗?

我怎样才能解决这个问题?


重现的步骤

  1. 在Visual Basic中使用.NET 4.0创建新的Windows窗体应用程序 Studio 2010。
  2. TextBoxMaskedTextBoxButton添加到默认表单
  3. 将MaskedTextBox上的Mask属性更改为“_____”。
  4. 添加一些事件处理程序:

    private void maskedTextBox1_GotFocus(object sender, EventArgs e)
    {
      Debug.WriteLine("GotFocus");
      maskedTextBox1.SelectAll();
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
      Debug.WriteLine("Click");
      maskedTextBox1.SelectAll();
    }
    
  5. 运行程序,将一些数据输入MaskedTextBox,通过控件选项卡返回到它。它选择MaskedTextBox的内容。

  6. 选择其他TextBox。尝试单击MaskedTextBox。输出显示调用了GotFocus事件,但未选中文本。
  7. 尝试点击表单中的按钮。文本未被选中。
  8. 在Windows窗体应用程序项目中使用.NET 4.0在Visual Studio 2010中测试


    为什么这不是TextBox.SelectAll() does not work with TAB

    的副本

    如果您注意到,标题显示“SelectAll不适用于 TAB ”。在我的情况下, 使用 Tab 使用鼠标 - 完全相反的情况。该问题的答案是使用GotFocus事件。我已经在使用GotFocus事件,但它不起作用。答案没有回答这个问题。这显然不重复。如果我错了,请在评论中解释。

2 个答案:

答案 0 :(得分:10)

您的SelectAll()被屏蔽文本框选择的默认功能覆盖。我会使用Enter事件,它允许选项卡式输入或鼠标单击进入蒙版文本框。您很可能需要使用BeginInvoke方法。请尝试下面的代码。当我尝试时它对我有用...

private void maskedTextBox1_Enter(object sender, EventArgs e)
{
    BeginInvoke((Action) delegate { SetMaskedTextBoxSelectAll((MaskedTextBox) sender); });
}

private void SetMaskedTextBoxSelectAll(MaskedTextBox txtbox)
{
    txtbox.SelectAll();
}

答案 1 :(得分:0)

在全选之前执行焦点对我有用:

private void Masked_Enter(object sender, EventArgs e) {
    ((MaskedTextBox)sender).Focus();
    ((MaskedTextBox)sender).SelectAll();
}