【发布时间】:2011-07-18 15:31:25
【问题描述】:
如何在 winforms 中创建一个菜单,该菜单与我们浏览任何文件夹时出现在 Windows 资源管理器的左侧框架中的菜单完全相似。菜单包含树节点和根节点,通过单击 + 和 - 符号出现和消失。
【问题讨论】:
标签: c# winforms menu treeview root
如何在 winforms 中创建一个菜单,该菜单与我们浏览任何文件夹时出现在 Windows 资源管理器的左侧框架中的菜单完全相似。菜单包含树节点和根节点,通过单击 + 和 - 符号出现和消失。
【问题讨论】:
标签: c# winforms menu treeview root
嗯,这不是菜单,而是树状视图。您可以使用 WinForms 树视图,但开箱即用它看起来与资源管理器树视图不完全相同。您需要应用 Explorer 窗口主题。
您需要 P/Invoke 调用SetWindowTheme 传递树的窗口句柄并使用“explorer”作为主题。
将以下代码粘贴到项目中的新类中,编译并使用此自定义控件,而不是内置的TreeView 控件。
public class NativeTreeView : System.Windows.Forms.TreeView
{
[DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
private extern static int SetWindowTheme(
IntPtr hWnd,
string pszSubAppName,
string pszSubIdList
);
protected override void CreateHandle()
{
base.CreateHandle();
SetWindowTheme(this.Handle, "explorer", null);
}
}
请注意,此技巧同样适用于 ListView 控件。
【讨论】:
您可以在 WinForms 树视图中拥有多个“根”节点:
treeView.Nodes.Add("Root 1");
treeView.Nodes.Add("Root 2");
它们可以是带有子节点的完整节点,而不是上面的文本。
【讨论】: