Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何关注文本框而不失去其价值_C#_Wpf - Fatal编程技术网

C# 如何关注文本框而不失去其价值

C# 如何关注文本框而不失去其价值,c#,wpf,C#,Wpf,我试图操纵一个文本框,这样您就可以单击它或在它上单击选项卡,并且您可以集中精力更改该值,而无需退格删除现有值。下面的代码可以工作,但是如果用户不想更改值,只是碰巧在控件之间切换,那么该值就会丢失。有没有一种简单的方法可以做到这一点,而不必跟踪当前和以前的变量值 以下代码为用户提供了焦点,但删除了现有值: private void txt_foo_GotFocus(object sender, RoutedEventArgs e) { TextBox tb = (TextBox)sende

我试图操纵一个
文本框
,这样您就可以单击它或在它上单击选项卡,并且您可以集中精力更改该值,而无需退格删除现有值。下面的代码可以工作,但是如果用户不想更改值,只是碰巧在控件之间切换,那么该值就会丢失。有没有一种简单的方法可以做到这一点,而不必跟踪当前和以前的变量值

以下代码为用户提供了焦点,但删除了现有值:

private void txt_foo_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox tb = (TextBox)sender;
    tb.Text = string.Empty;
    tb.GotFocus -= txt_panelWidth_GotFocus;
}

我的解决方案:选择文本

void SelectingTextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    var tb = sender as TextBox;
    if (tb != null && e.KeyboardDevice.IsKeyDown(Key.Tab))
    {
        tb.SelectAll();
    }
}

请注意,这个
e.KeyboardDevice.IsKeyDown(Key.Tab)
条件是我在项目中使用的,以便在按选项卡导航时仅选择所有文本。如果始终要选择所有文本,则可以删除该条件。但是,当所有文本都被选中时,使用鼠标的用户可能会非常恼火。

我的解决方案:选择文本

void SelectingTextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    var tb = sender as TextBox;
    if (tb != null && e.KeyboardDevice.IsKeyDown(Key.Tab))
    {
        tb.SelectAll();
    }
}

请注意,这个
e.KeyboardDevice.IsKeyDown(Key.Tab)
条件是我在项目中使用的,以便在按选项卡导航时仅选择所有文本。如果始终要选择所有文本,则可以删除该条件。但是,如果用户在选中所有文本时使用鼠标,这可能会非常烦人。

当您在
文本框中插入选项卡并在其中单击时,应选择该文本框中的文本:

private void txt_foo_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox tb = (TextBox)sender;
    tb.Dispatcher.BeginInvoke(new Action(() => tb.SelectAll()));
}

当您在
文本框中进行制表和单击时,应选择
文本框中的文本:

private void txt_foo_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox tb = (TextBox)sender;
    tb.Dispatcher.BeginInvoke(new Action(() => tb.SelectAll()));
}

嗯。。。只需选择焦点上的整个文本,而不是删除它?所选文本将在第一次输入时被替换,但在不作更改的情况下跳出选项卡时保持不变。是否可以尝试
tb.SelectAll()
而不是将文本设置为空?当你在文本框内单击时,这会起作用吗?这对我没用。嗯。。。只需选择焦点上的整个文本,而不是删除它?所选文本将在第一次输入时被替换,但在不作更改的情况下跳出选项卡时保持不变。是否可以尝试
tb.SelectAll()
而不是将文本设置为空?当你在文本框内单击时,这会起作用吗?它对我不起作用。当我用tab键点击它时,它会选择所有文本,但当我点击它时,它不会选择所有文本。@nikotromus是的,正如我在代码段下面写的那样。您可以自由更改条件以满足您的要求,但在使用select on click(点击选择)发货后,请确保避免与任何用户联系。我一起取出了if条件,但当我单击文本框时,它仍然无法选择所有文本。我很好奇,从用户体验的角度来看,为什么您觉得这样做不好?我可以看到,对于文本字段,但对于用户想要更改的数字配置,为什么他们要选择一个文本框,在所有文本中退格,然后输入一个新值?@nikotromus如果他们喜欢用鼠标选择所有内容,他们只需双击选择所有内容。然而,我不知道您的详细用例,但我知道当我输入任何非琐碎的内容,然后需要更正位置3处的字符/数字时的感受。如果我不能立即单击位置3并开始更正,我会很恼火。当我用tab键浏览它时,它会选择所有文本,但当我单击它时,它不会选择所有文本。@nikotromus是的,正如我在代码段下面写的那样。您可以自由更改条件以满足您的要求,但在使用select on click(点击选择)发货后,请确保避免与任何用户联系。我一起取出了if条件,但当我单击文本框时,它仍然无法选择所有文本。我很好奇,从用户体验的角度来看,为什么您觉得这样做不好?我可以看到,对于文本字段,但对于用户想要更改的数字配置,为什么他们要选择一个文本框,在所有文本中退格,然后输入一个新值?@nikotromus如果他们喜欢用鼠标选择所有内容,他们只需双击选择所有内容。然而,我不知道您的详细用例,但我知道当我输入任何非琐碎的内容,然后需要更正位置3处的字符/数字时的感受。如果我不能立即点击位置3并开始纠正,我会很恼火。这个解决方案对标签和点击都非常有效。谢谢此解决方案适用于选项卡和单击。谢谢