我在C#(VS2010)中创建了一个包含(以及其他)文本框控件的表单。 文本框可能在某些时候包含大量数据(约300万个字符)。
当滚动或移动表单时,没有遇到任何问题,但是当表单被最小化并再次恢复时,会触发一个重绘序列(我相信),这会导致表单的大约滞后5-10秒重新粉刷。
我已经尝试了几种解决方案:
使用双缓冲区 - 根据我所读到的,双缓冲仅适用于表单本身而不适用于其控件
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.UserPaint, true);
禁用文本框redrew一次最小化使用:SendMessage(this.my_textBox.Handle, WM_SETREDRAW, false, 0);
并在表单恢复后启用。我注意到,如果我不重新启用文本框重绘,表单重绘滞后也会存在。
使用位图的手动双缓冲区 - 与#1类似的结果。
我在某处读到这个问题可能与文本框控件有关,试图缩小或调整到数据量,但无法覆盖它。
我以前在MFC中有过相同的项目,但没有遇到任何重复或滞后的问题。
请告诉我如何解决这个问题。
答案 0 :(得分:1)
答案 1 :(得分:0)
我可能不理解某些东西(或者有可能是你不能这样做的原因),但是你不能像这样派生自己的TextBox类吗?
public class MyTextBox : TextBox
{
public MyTextBox() : base()
{
SetStyle(ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.ResizeRedraw, false);
}
}
然后使用它代替常规文本框?