gpt4 book ai didi

c# - 没有任何事件的 Treeview 闪烁

转载 作者:行者123 更新时间:2023-12-05 02:24:17 25 4
gpt4 key购买 nike

我有一个闪烁的 TreeView,我知道这是一个常见问题。问题是 TreeView 没有事件。

是的,我知道当我从 XmlDocument 中递归添加节点时,它会闪烁一点,这是正常的。即使在加载所有内容后,我的也会闪烁。一旦我的鼠标悬停在一个节点上或者我点击了一个节点。我检查过:

  • 可能导致此问题的所有属性(DrawModeShowToolTip 等)
  • 确保没有发生的所有事件。 (我有一个拖放事件,但我也对其进行了评论以确保这不是问题并且它不会改变任何东西)。
  • 我在 TreeView 更新时使用了 BeginUpdateEndUpdate。 (现在它已填充并且没有涉及 TreeView 的进程,但它仍然闪烁。

我是否遗漏了一些明显的东西?

最佳答案

我想通了。事实证明,当 SplitContainer 中的 TreeView(也许另一个控件可能有同样的问题)导致闪烁问题时。我尝试了一个非常简单的原型(prototype),一个新的 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);

都在 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);
}

这将完全停止SplitContainer 中控件的闪烁。希望我可以帮助别人。

关于c# - 没有任何事件的 Treeview 闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13936659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com