Com*_*ght 6 c# controls textbox winforms
编辑:WPF 标签是一个错误,这是winforms。
我有一个TextBox,我希望在用户单击它时突出显示其中的所有文本(以便他们可以轻松替换它)。我有以下事件处理程序链接到TextBox:
private void TextBox_Enter(object sender, EventArgs e) {
SelectAll();
}
Run Code Online (Sandbox Code Playgroud)
但是当我点击TextBox文本时,文本只被选中了几分之一秒(有时它太快了我根本看不到它)然后它又回到了一个光标。有谁知道如何解决这个问题,或者是否有任何相对简单的解决方法?谢谢。
编辑:我对TextBox.MouseClick事件尝试了同样的事情(并且它突出显示了文本)但是因为它是MouseClick每次我点击文本时突出显示的事件TextBox(即使TextBox已经有焦点)。
我也试过,SelectionStart = 0; SelectionLength = Text.Length但同样的事情发生了。这让我相信这个问题与事件有关。
我也尝试了该TextBox.GotFocus事件并遇到了完全相同的问题。
我在 Windows 窗体应用程序中执行此操作。
Bio*_*ode 12
您没有看到文本被选中的原因TextBox是当这些事件之一发生时它很忙(例如,插入符号定位)。您实际上选择了文本,然后TextBox执行并删除选择的内部事件处理程序,例如通过设置插入符号位置。
您所要做的就是等待内部事件处理程序完成。
您可以通过使用Dispatcher. 当您Dispatcher异步调用时,委托不会立即执行,而是在所有先前排队的操作(如内部事件处理程序)从调度程序队列中清除后排队并执行。
因此,使用TextBox.GotFocusWPF 中的事件(或TextBox.EnterWinForms 中的事件)和异步Dispatcher将解决问题:
WPF
private async void SelectAll_OnTextBoxGotFocus(object sender, RoutedEventArgs e)
{
await Application.Current.Dispatcher.InvokeAsync((sender as TextBox).SelectAll);
}
Run Code Online (Sandbox Code Playgroud)
窗体
private void SelectAll_OnTextBoxEnter(object sender, EventArgs e)
{
var textBox = sender as TextBox;
textBox.BeginInvoke(new Action(textBox.SelectAll));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1737 次 |
| 最近记录: |