日期:2014-05-17  浏览次数:21062 次

richtextbox选中的闪烁问题
我有一个richtextbox,里面有很多中文,有一个定时器,每隔200ms,自动选中一个字,第一个200ms选中第一个字,第二个ms选中前2个字,第三个200ms选中前3个字,依次类推,第n个300毫秒时选中前N个字
问题是自动选中的时候老是有闪烁现象,我google了一下,网上有些解决办法
1、WM_SETREDRAW办法
SendMessage(this.richTextBox1.Handle, WM_SETREDRAW, 0, IntPtr.Zero);
this.richTextBox1.SelectionStart = 0;
this.richTextBox1.SelectionLength = m_curIndex;
m_curIndex++;
SendMessage(this.richTextBox1.Handle, WM_SETREDRAW, 1, IntPtr.Zero);
this.richTextBox1.Refresh();
2、LockWindowUpdate办法
LockWindowUpdate(this.richTextBox1.Handle.ToInt32());
this.richTextBox1.SelectionStart = 0;
this.richTextBox1.SelectionLength = m_curIndex;
m_curIndex++;
LockWindowUpdate(0);
this.richTextBox1.Refresh();

但是不管用哪个办法,都还是闪烁,不知道是我使用不当还是有啥特别之处,请指点,谢谢

------解决方案--------------------
this.richTextBox1.Refresh();
替换为 this.richTextBox1.Invalidate(rc);

rc为你需要刷新的区域,这样就几乎不闪烁了。
------解决方案--------------------
[DllImport("user32")]
private static extern int SendMessage(HWND hwnd, int wMsg, int wParam, IntPtr lParam);

SendMessage(base.Handle, WM_SETREDRAW, 0, IntPtr.Zero);放在前面,然后中间写着色代码,最后SendMessage(base.Handle, WM_SETREDRAW, 1, IntPtr.Zero);把代码夹在中间 
试试。