【发布时间】:2014-02-21 07:01:14
【问题描述】:
我希望对根节点而不是 Treeview 控件的子节点有复选框。
- [x]Pie Chart report
- Sales report
- Sales Projection report
- Linear Sales report
- [x]Surface Chart report
- Sales report
- Sales Projection report
- Linear Sales report
- [x]Caligraph report
- Sales report
- Sales Projection report
- Linear Sales report
为了实现这一点,我对常规树视图控件进行了更改
tvreport 是 Treeview 控件
this.tvreport.DrawNode += new System.Windows.Forms.DrawTreeNodeEventHandler(tvreport_DrawNode);
this.tvreport.ShowLines = true;
this.tvreport.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
private void tvreport_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
if (IsContactNode(e.Node))
{
Color backColor, foreColor;
if ((e.State & TreeNodeStates.Selected) == TreeNodeStates.Selected)
{
backColor = SystemColors.Highlight;
foreColor = SystemColors.HighlightText;
}
if ((e.State & TreeNodeStates.Hot) == TreeNodeStates.Hot)
{
backColor = SystemColors.HotTrack;
foreColor = SystemColors.HighlightText;
}
else
{
backColor = e.Node.BackColor;
foreColor = e.Node.ForeColor;
}
Rectangle newBounds = e.Node.Bounds;
newBounds.X = 60;
using (SolidBrush brush = new SolidBrush(backColor))
{
e.Graphics.FillRectangle(brush, e.Node.Bounds);
}
TextRenderer.DrawText(e.Graphics, e.Node.Text, this.tvreport.Font, e.Node.Bounds, foreColor, backColor);
if ((e.State & TreeNodeStates.Focused) == TreeNodeStates.Focused)
{
ControlPaint.DrawFocusRectangle(e.Graphics, e.Node.Bounds, foreColor, backColor);
}
e.DrawDefault = false;
}
else
{
e.DrawDefault = true;
tvContactList1.ShowRootLines = true;
tvContactList1.ShowLines = true;
}
}
private bool IsContactNode(TreeNode node)
{
return node.Parent != null;
}
运行代码后发现根节点显示复选框,子节点没有复选框[这是我希望拥有的]。
但问题是显示层次结构的“线条”消失了。现在我想填充这些 LINES。这是如何实现的。
【问题讨论】: