【问题标题】:TreeView turn off checkboxesTreeView 关闭复选框
【发布时间】:2014-04-02 07:40:55
【问题描述】:

我在 TreeView 中隐藏 CheckBox 时遇到了非常奇怪的问题。当 TreeView 位于窗口中的第一个 TabPage 上时,一切正常,但当 TreeView 在第二个 TabPage 上时,第一个 TreeNode 始终具有复选框。

我用来隐藏某些复选框的代码如下所示:

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;

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")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);


private void TurnOff(TreeNode node) {

    TVITEM tvi = new TVITEM();
    tvi.hItem = node.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.Handle, TVM_SETITEM, IntPtr.Zero, lparam);
    Marshal.FreeHGlobal(lparam);
}

如果有人知道这个问题的解决方案,请分享。

【问题讨论】:

  • 只是猜测:先选择第二页有帮助吗?
  • 尝试修改树视图属性:将 CheckBoxes 设置为 false。
  • 禁用所有复选框不是解决方案,因为我希望它们在子节点中。它们应该只在父节点中不可见
  • 看看here
  • 这是一个相当令人遗憾的 hack,它出现在几个 SO 问题中。 TurnOff() 中令人讨厌的内存泄漏肯定是有问题的,调用 Marshal.FreeHGlobal() 不是可选的。硬编码的“wezel”可能是您所抱怨的,制作那个“节点”。

标签: c# .net winforms treeview


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 2019-12-10
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2016-05-17
    • 1970-01-01
    相关资源
    最近更新 更多