【问题标题】:How to automatically select all text on focus in WPF TextBox?如何在 WPF TextBox 中自动选择焦点上的所有文本?
【发布时间】:2009-03-18 23:54:50
【问题描述】:

如果我从GotFocus 事件处理程序调用SelectAll,它不适用于鼠标 - 鼠标一松开,选择就会消失。

编辑:人们喜欢 Donnelle 的答案,我将尝试解释为什么我不像接受的答案那样喜欢它。

  • 它更复杂,而接受的答案以更简单的方式做同样的事情。
  • 接受答案的可用性更好。当您单击文本中间时,当您松开鼠标时,文本会被取消选择,让您可以立即开始编辑,如果您仍想全选,只需再次按下按钮,这一次它不会在释放时取消选择。按照 Donelle 的食谱,如果我单击文本中间,我必须再次单击才能进行编辑。如果我单击文本内的某处而不是文本的外部,这很可能意味着我想开始编辑而不是覆盖所有内容。

【问题讨论】:

  • 如果您要拥有多个表格,她的回答将继续变得没有第一个复杂。这两个选项的可用性没有实际意义,因为您可以更改其中任何一个的工作方式。
  • @Sergey:您可能希望更改此问题的已接受答案,因为此后出现了更好的答案。我不会推荐我的,但你可以;)
  • Question 有 Silverlight 标签,但 Silverlight 没有大部分事件/任何类型的预览事件。那么silverlight应该使用哪种解决方案呢?
  • Link "为什么 WPF 中的焦点如此棘手?"坏了
  • 正如下面对stackoverflow.com/a/2553297/492 的评论中提到的,madprops.org/blog/wpf-textbox-selectall-on-focus 是一个简单的解决方案,并保留了原始的 nouse 行为。我将事件注册放在构造函数中,因为我在应用程序中只有一个 WPF 控件。

标签: .net wpf silverlight textbox


【解决方案1】:

我用这个代码

  private void txtNav_GotFocus(object sender, RoutedEventArgs e)
            {
                e.Handled = true;
                var c = new DispatcherTimer();
                c.Interval = TimeSpan.FromMilliseconds(100);
                c.Tick += (a1, a2) =>
                {
                    c.IsEnabled = false;
                    txtNav.SelectAll();
                };
                c.IsEnabled = true;
    
            }

【讨论】:

    【解决方案2】:

    哇!读完以上所有内容后,我发现自己不知所措和困惑。我接受了我认为我在这篇文章中学到的东西,并尝试了一些完全不同的东西。要在获得焦点时选择 TexTbox 中的文本,我使用以下命令:

    private void TextField_GotFocus(object sender, RoutedEventArgs e)
    {
        TextBox tb = (sender as Textbox);
        if(tb != null)
        {
            e.Handled = true;
            tb.Focus();
            tb.SelectAll();
        }
    }
    

    TexTboxGotFocus 属性设置为此方法。

    运行应用程序并在TexTbox 中单击一次会突出显示TexTbox 中的所有内容。

    如果确实,目标是在用户单击TexTbox 时选择文本,这似乎很简单,并且涉及的代码要少得多。只是说...

    【讨论】:

    • 但是当您松开鼠标时,它会取消选择文本。所以这并不能解决问题。
    【解决方案3】:

    对我来说,在 TextBox 上单击鼠标后效果非常好:

    private void TextBox_GotFocus(object sender, RoutedEventArgs e)
    {
        Dispatcher.BeginInvoke(() => ((TextBox)sender).SelectAll());
        e.Handled = true;
    }
    

    【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2015-03-27
    • 2014-12-27
    • 1970-01-01
    • 2021-04-16
    • 2011-09-06
    • 2011-09-01
    • 2017-09-26
    • 2020-10-14
    相关资源
    最近更新 更多