我想通了。原來是當TreeView
(也許另一控制可能有同樣的問題)在一個SplitContainer
導致閃爍的問題。我嘗試了一個非常簡單的原型,一個新的Winform
只有一個SplitContainer
和TreeView
在一個容器內,我已經可以看到一些節點上的閃爍。嘗試了很多東西,但似乎完成這項工作的是:
this.SetStyle(ControlStyles.DoubleBuffer, true);
完全排除了所有的閃爍的另一件事是這樣的:
int style = NativeWinAPI.GetWindowLong(this.Handle, NativeWindowAPI.GWL_EXSTYLE);
style |= NativeWinAPI.WS_EX_COMPOSITED;
NativeWinAPI.SetWindowLong(this.Handle, NativeWinAPI.GWL_EXSTYLE, style);
無論是內。
NativeWinAPI類:
using System.Runtime.InteropServices;
internal static class NativeWinAPI
{
internal static readonly int GWL_EXSTYLE = -20;
internal static readonly int WS_EX_COMPOSITE = 0x02000000;
[DllImport("user32")]
internal static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32")]
internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, dwNewLong);
}
這將完全停SplitContainer
內部控制的閃爍。 希望我可以幫助這個人。
使用'BeginUpdate()'和'EndUpdate()'http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beginupdate.aspx – Bolu
我使用它,而樹視圖更新。現在一切都完成了,它仍然在閃爍。我會更新我的問題 – phadaphunk
當鼠標仍然閃爍時,它會閃爍嗎? –