2014-04-02 137 views
0

我在TreeView中隐藏CheckBoxes的问题非常奇怪。当TreeView位于窗口中的第一个TabPage上时,一切正常,但当第二个TabPage中的TreeView处于第一个TreeNode时,它始终有复选框。TreeView关闭复选框

root node without checkboxenter image description here

的代码我使用隐藏某些复选框看起来像这样:

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); 
} 

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

+0

只是猜测:它是否有助于首先选择第2页? – TaW

+0

尝试修改树视图属性:将CheckBoxes设置为false。 – user3165438

+0

禁用所有复选框不是一个解决方案,因为我希望它们在子节点中。他们应该只在父节点中隐形 – torpederos

回答