【发布时间】:2013-10-11 07:30:55
【问题描述】:
根据TreeView Remove CheckBox by some Nodes
这样做之后,我的tree-view 和check-box 没有parent node check-box。
但是我遇到了一个问题,我无法更改特定子节点的颜色。
即。如果我尝试改变
treeview1.Nodes[0].Nodes[2].BackColor=Color.Gray;
仍然具有相同的旧颜色。 谁可以帮我这个事。 谢谢。
编辑
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);
}
/// <summary>
/// Handles the DrawNode event of the treeView1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Windows.Forms.DrawTreeNodeEventArgs"/> instance containing the event data.</param>
/// <remarks></remarks>
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
if (e.Node.Level == 0)
HideCheckBox(e.Node.TreeView, e.Node);
e.DrawDefault = true;
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
treeView1.Nodes[0].Nodes[1].BackColor = Color.Red;
}
【问题讨论】:
-
我测试了它,它对我来说工作正常。你在哪里称呼这个
treeview1.Nodes[0].Nodes[2].BackColor=Color.Gray;? -
我在 treeView1_AfterSelect King 上调用它。你的父节点是复选框吗?
-
好吧,经过测试,它也可以工作。你的问题很奇怪。
-
国王你能告诉我你做得怎么样吗?
-
我完全按照你的描述做了。我使用了您发布的链接中的
Cody Gray代码,隐藏了我想要的复选框,然后将您发布的代码添加到AfterSelect事件处理程序中,仅此而已。它工作正常。
标签: c# user-interface treeview components