我有一个闪烁TreeView
我知道这是一个常见问题。事情是TreeView
没有事件。
是的,我明白,当我从 a 递归添加节点时XmlDocument
它有点闪烁,这是正常的。即使所有内容都加载后,我的也会闪烁。当我的鼠标悬停在节点上或单击节点时。我检查了 :
- 所有可能导致此问题的属性(
DrawMode
, ShowToolTip
etc..)
- 所有事件都要确保没有。 (我有一个拖放事件,但我也对其进行了评论,以确保这不是问题并且不会改变任何内容)。
- I used
BeginUpdate
and EndUpdate
而TreeView
正在更新。 (现在它已填充,并且没有涉及的进程TreeView
但它仍然闪烁。
我错过了一些明显的东西吗?
我想到了。事实证明,当TreeView
(也许另一个控件可能有同样的问题)SplitContainer
导致闪烁问题。我尝试了一个非常简单的原型,一个新的Winform
只有一个SplitContainer
and a 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);
两者都在里面Form_Load
.
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);
}
这会totally停止内部控件的闪烁SplitContainer
。
希望我能帮助别人解决这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)