如何使用c# 4.0 winform Application隐藏TreeView控件中特定TreeNode的复选框

本文关键字:控件 TreeNode 复选框 TreeView 隐藏 何使用 Application winform | 更新日期: 2023-09-27 18:06:39

在我的c# Windows窗体应用程序中,我有一个带复选框的Treeview控件。

我想隐藏某些树节点的复选框在TreeView控件从用户。我是怎么做的?

如何使用c# 4.0 winform Application隐藏TreeView控件中特定TreeNode的复选框

这篇文章解释了如何在树视图中隐藏某个节点的复选框。

文章中的解释和代码:

目前,没有内置支持来完成此操作。但是我们可以发送向treeview控件发送tvm_settem消息,设置TVITEM结构的状态字段为0,TVITEM的hItem字段为树节点的句柄。那么这个Treenode将去掉复选框。

示例代码列表如下:

public const int TVIF_STATE = 0x8;
public const int TVIS_STATEIMAGEMASK = 0xF000;
public const int TV_FIRST= 0x1100;
public const int  TVM_SETITEM = TV_FIRST + 63;
public struct TVITEM
{
    public int mask;
    public IntPtr hItem;
    public int state;
    public int stateMask;
    [MarshalAs(UnmanagedType.LPTStr)]
    public String lpszText;
    public int cchTextMax;
    public int iImage;
    public int iSelectedImage;
    public int cChildren;
    public IntPtr lParam;
}
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private void button1_Click(object sender, System.EventArgs e)
{
    TVITEM tvi=new TVITEM();
    tvi.hItem=this.treeView1.SelectedNode.Handle;
    tvi.mask=TVIF_STATE;
    tvi.stateMask = TVIS_STATEIMAGEMASK;
    tvi.state=0;
    IntPtr lparam=Marshal.AllocHGlobal(Marshal.SizeOf(tvi));
    Marshal.StructureToPtr(tvi, lparam, false);
    SendMessage(this.treeView1.Handle, TVM_SETITEM, IntPtr.Zero, lparam);
}

这段代码隐藏了选中的树节点的复选框,它在我的的一面。您可以复制并粘贴到您的项目中以进行测试。