如何专注于文本框而不会失去其价值

时间:2018-02-23 14:41:44

标签: c# wpf

我正在尝试操作TextBox,以便您可以单击它或选项卡,并且您可以专注于更改值而无需退格以删除现有值。以下代码可以正常工作,但如果用户不想更改该值并恰好通过控件进行制表,则该值将丢失。有没有一种简单的方法可以做到这一点,而无需跟踪当前和以前的变量值?

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

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

2 个答案:

答案 0 :(得分:5)

我的解决方案:选择文字

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)条件是我在项目中使用的条件,以便仅在按Tab键导航时选择所有文本。如果您始终要选择所有文本,则可以删除该条件。但是,当选择所有文本时,使用鼠标的用户可能会非常烦人。

答案 1 :(得分:3)

当您勾选到TextBox并点击其中时,应选择private void txt_foo_GotFocus(object sender, RoutedEventArgs e) { TextBox tb = (TextBox)sender; tb.Dispatcher.BeginInvoke(new Action(() => tb.SelectAll())); } 中的文字:

{{1}}