【问题标题】:MaskedTextBox.SelectAll on GotFocus doesn't work with mouseGotFocus 上的 MaskedTextBox.SelectAll 不适用于鼠标
【发布时间】:2015-04-20 03:33:15
【问题描述】:

我想在单击(或选项卡到)控件时选择MaskedTextBox 的所有内容,以便它们可以轻松替换旧内容。我尝试在Enter 事件中调用SelectAll(),但这根本不起作用。

我切换到使用GotFocus 事件,它在切换控件时效果很好,但是当我用鼠标单击它时就不起作用了。我只想在第一次输入/关注控件时选择所有内容(后续单击可能用于定位光标以编辑现有文本)。

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

我该如何解决这个问题?


复制步骤

  1. 在 Visual 的 .NET 4.0 中创建一个新的 Windows 窗体应用程序 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. 选择另一个文本框。尝试单击 MaskedTextBox。输出显示调用了GotFocus 事件,但未选择文本。
  7. 尝试单击表单中的按钮。文本没有被选中。

在 Windows 窗体应用程序项目中使用 .NET 4.0 在 Visual Studio 2010 中测试


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

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

【问题讨论】:

  • 看看here,它可能会有所帮助

标签: c# .net winforms maskedtextbox


【解决方案1】:

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

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

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

【讨论】:

  • BeginInvoke 是否只是强制SelectAll() 在执行了屏蔽文本框的默认功能后运行?如果您不介意进一步扩展您的答案,我很乐意听到更多关于为什么这样做有效的信息。
  • 我发现了一个 less wordy way 正在做 BeginInvoke 并冒昧地编辑了答案。
  • 这里有一些关于 BeginInvoke 的不错的读物。 CodeProject 可以比我更好地解释它。但是,基本上在您的示例中 BeginInvoke 在默认功能之后运行。 codeproject.com/Articles/10311/What-s-up-with-BeginInvoke
【解决方案2】:

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

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

【讨论】:

  • 当蒙版文本框通过单击获得焦点时,这是否有效?它适用于我的其他场景,但不是那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2013-07-08
  • 2014-04-10
  • 1970-01-01
  • 2019-06-01
  • 2021-05-17
相关资源
最近更新 更多