【发布时间】:2013-01-02 19:57:07
【问题描述】:
我在 C# (VS2010) 中创建了一个表单,其中包含(除其他外)一个文本框控件。 文本框有时可能包含大量数据(约 300 万个字符)。
当滚动或移动表单时没有遇到任何问题,但是当表单最小化并再次恢复时,会触发重绘序列(我相信),这会导致表单延迟大约 5-10 秒重新粉刷。
我已经尝试了几种解决方案:
-
使用双缓冲——根据我的阅读,双缓冲仅适用于表单本身,而不适用于其控件
this.SetStyle(ControlStyles.DoubleBuffer, true);this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);this.SetStyle(ControlStyles.UserPaint, true); 在最小化后禁用文本框重绘:
SendMessage(this.my_textBox.Handle, WM_SETREDRAW, false, 0);并在表格恢复后重新启用。我注意到如果我不重新启用文本框重绘,表单重绘滞后也存在。使用位图的手动双缓冲区——结果与 #1 类似。
我在某处读到此问题可能与尝试缩小或调整数据量的文本框控件有关,但无法覆盖它。
我之前在 MFC 中有过相同的项目,但没有遇到任何重绘或滞后问题。
请告诉我如何解决这个问题。
【问题讨论】:
-
将 WordWrap 属性设置为 False。很贵。
-
WordWrap 对于我的目的来说是必不可少的。此外,在更新文本框或移动表单时,我不会遇到任何重绘问题 - 只有当窗口从最小化状态恢复时。
-
嗯,你征求意见。不服用是预期的结果。
-
在我使用下面覆盖的文本框和 3MB 文本制作的示例中,自动换行已打开,并且立即恢复。
标签: c# winforms textbox restore repaint