在 C# WinForm 中通过代码编辑文本时防止文本框中失去焦点

问题描述 投票:0回答:1

我正在开发一个桌面应用程序,它从文本文件中读取行,处理它们,然后在多行文本框中按顺序显示它们。读取和处理过程非常长,并且每 2/3 秒就会向 TextBox 添加一个新行。同时,用户应该能够检查TextBox中处理后的文本并进行编辑,纠正一些可能的处理错误。在漫长的过程结束时,通过按下按钮,文本框中显示的文本经过代码处理并同时由用户更正将被保存到文件中。 正如您可能已经猜到的那样,问题在于每 2/3 秒,即当通过代码将另一个处理过的行添加到同一个 TextBox 时,用户可能正在编辑的 TexBox 就会失去焦点。

我正在使用

TextBox.AppendText(text)

向 TextBox 添加新行(每 2/3 秒),但这并不能防止焦点丢失。 感谢任何可以帮助我的人。

c# winforms
1个回答
0
投票

您可以尝试这个包装

AppendText
。它应该会有所帮助,但请记住,它更多的是 80/20 解决方案。

如果用户编辑速度非常快,还进行快速选择等,或者添加的内容比文本框的可见大小大得多,那么您将不可避免地时不时地看到内容中的故障和/或跳跃。与用户输入和编程输入并行更新控件很容易出错,从用户体验的角度来看可能不是一个好主意

private void SafeAppendText(string line)
{
    if (InvokeRequired)
    {
        Invoke(new Action<string>(SafeAppendText), line);
        return;
    }

    int selStart = textBox.SelectionStart;
    int selLength = textBox.SelectionLength;

    textBox.AppendText(line);

    textBox.SelectionStart = selStart ;
    textBox.SelectionLength = selLength ;
    textBox.ScrollToCaret();
}
© www.soinside.com 2019 - 2024. All rights reserved.