c# - Winforms 中的菜单类似于文件夹资源管理器菜单

标签 c# winforms menu treeview root

如何在 winforms 中创建一个菜单,该菜单与我们浏览任何文件夹时出现在 Windows 资源管理器左侧框架上的菜单完全相似。该菜单包含树节点和根节点,通过单击 + 和 - 符号来显示和消失。

最佳答案

嗯,这不是菜单,而是 TreeView 。您可以使用 WinForms TreeView ,但开箱后它看起来与 Explorer TreeView 并不完全相同。您需要应用资源管理器窗口主题。

您需要 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 控件的工作方式也完全相同。

关于c# - Winforms 中的菜单类似于文件夹资源管理器菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5360525/

相关文章:

jquery - 是否有任何 jQuery 插件可以提供与 www.squarespace.com 菜单类似的结果?

c# - 以编程方式在 TFS 中添加新迭代

c# - WPF3D 如何操纵与相机平行的平面中的对象

c# - 该方法或操作未实现。在 C# 中停止 IIS 网站时

c# - 如何从返回到文本框的 SQL 查询中将数字四舍五入到小数点后两位

.net - 在 TextBox 中 Windows 窗体滚动日志输出的最佳方法

c# - ComboBox 绑定(bind)到枚举类型的值,同时还具有 "blank"条目?

javascript - 单击不起作用滑出菜单栏

javascript - 使用 Jquery 切换 css 类

c# - C# 中的 Int64 不等于 long 吗?