【问题标题】:TreeView checkboxes not displaying correctlyTreeView 复选框未正确显示
【发布时间】:2014-04-16 04:47:38
【问题描述】:

我需要一些关于带有复选框的TreeView 的帮助,因为在隐藏父节点的复选框并将它们只留给子节点后,它们似乎被切断了。 树视图如下所示:

我用来隐藏父节点复选框的代码是这样的:

private const int TVIF_STATE = 0x8;
private const int TVIS_STATEIMAGEMASK = 0xF000;
private const int TV_FIRST = 0x1100;
private const int TVM_SETITEM = TV_FIRST + 63;

[StructLayout(LayoutKind.Sequential, Pack = 8, CharSet = CharSet.Auto)]
private 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", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref TVITEM lParam);

/// <summary>
/// Hides the checkbox for the specified node on a TreeView control.
/// </summary>
private void HideCheckBox(TreeView tvw, TreeNode node)
{
    TVITEM tvi = new TVITEM();
    tvi.hItem = node.Handle;
    tvi.mask = TVIF_STATE;
    tvi.stateMask = TVIS_STATEIMAGEMASK;
    tvi.state = 0;
    SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);
}

void sharedFolders_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
    if (e.Node.Level == 1 || e.Node.Level == 0)
        HideCheckBox(sharedFolders, e.Node);
    e.DrawDefault = true;
}

谁能帮我显示完整的复选框?

【问题讨论】:

    标签: c# winforms checkbox treeview


    【解决方案1】:

    尝试将您的 TreeView DrawMode 更改为 OwnerDrawAll

    sharedFolders.DrawMode = TreeViewDrawMode.OwnerDrawAll;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多