gpt4 book ai didi

c# - 如何在鼠标单击时选择 TextBox 的所有文本? (TextBox.SelectAll() 不适用于 TextBox.Enter)

转载 作者:行者123 更新时间:2023-12-03 15:43:48 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to automatically select all text on focus in WPF TextBox?

(33 个答案)



How to select all text in TextBox WPF when focused?

(2 个回答)


去年关闭。




编辑: WPF 标签是一个错误,这是 winforms。

我有一个 TextBox我希望在用户单击它时突出显示其中的所有文本(以便他们可以轻松替换它)。我有以下事件处理程序链接到 TextBox :

private void TextBox_Enter(object sender, EventArgs e) {
SelectAll();
}
但是当我点击 TextBox文本只被选中了几分之一秒(有时它太快了,我根本看不到它),然后它又回到了光标状态。有谁知道如何解决这个问题,或者是否有任何相对简单的解决方法?谢谢。
编辑:我用 TextBox.MouseClick 尝试了同样的事情事件(它突出显示了文本),但因为它是 MouseClick每次单击 TextBox 时,文本都会突出显示(即使 TextBox 已经有了焦点)。
我也试过 SelectionStart = 0; SelectionLength = Text.Length但同样的事情也会发生。这让我相信这个问题与事件有关。
我也试过 TextBox.GotFocus事件并有完全相同的问题。
我在 Windows 窗体应用程序中执行此操作。

最佳答案

您没有看到文本被选中的原因是 TextBox当其中一个事件发生时(例如,插入符号定位)是忙碌的。您实际上选择了文本,然后是 TextBox 的内部事件处理程序执行并删除选择,例如通过设置插入符号位置。

您所要做的就是等到内部事件处理程序完成。
您可以使用 Dispatcher .当您调用 Dispatcher异步委托(delegate)不会立即执行,而是在所有先前排队的操作(如内部事件处理程序)从调度程序队列中清除后排队并执行。

所以使用 TextBox.GotFocus WPF 中的事件(或 WinForms 中的 TextBox.Enter)和异步 Dispatcher会成功的:

WPF

private async void SelectAll_OnTextBoxGotFocus(object sender, RoutedEventArgs e)
{
await Application.Current.Dispatcher.InvokeAsync((sender as TextBox).SelectAll);
}

WinForms
private void SelectAll_OnTextBoxEnter(object sender, EventArgs e)
{
var textBox = sender as TextBox;
textBox.BeginInvoke(new Action(textBox.SelectAll));
}

关于c# - 如何在鼠标单击时选择 TextBox 的所有文本? (TextBox.SelectAll() 不适用于 TextBox.Enter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59558368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com