最近因项目需求,想要实现如下一简单的功能:
TreeView树节点中CheckBox 前面的复选框如何隐藏
当时情况是这样的:

我想要实现成这样的:

在网上查找了很多,全是无用代码,譬如:

等等,全是一堆废话,简直是迷惑众生…
直接上代码:
1.直接创建我们的隐藏功能类
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;
private static void HideCheckBox(TreeView treeView, TreeNode node)
{
TVITEM tVITEM = new TVITEM();
tVITEM.hItem = node.Handle;
tVITEM.mask = TVIF_STATE;
tVITEM.stateMask = TVIS_STATEIMAGEMASK;
tVITEM.state = 0;
SendMessage(treeView.Handle, TVM_SETITEM, IntPtr.Zero, ref tVITEM);
}
[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);
2.直接在我们需要处掉隐藏方法【HideCheckBox】即可