Public Class Form1 Private TestTree As New MyTree Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 0 To 10 Dim n As TreeNode = TestTree.Nodes.Add("Node" + i.ToString) For j As Integer = 0 To 5 Dim nn As TreeNode = n.Nodes.Add("SubNode" + j.ToString) For m As Integer = 0 To 4 nn.Nodes.Add(m.ToString) Next Next Next Me.Controls.Add(TestTree) TestTree.Dock = DockStyle.Fill End SubEnd ClassPublic Class MyTree Inherits TreeView Dim NodeStringFormat As StringFormat Public Sub New() NodeStringFormat = New StringFormat NodeStringFormat.LineAlignment = StringAlignment.Center : NodeStringFormat.Alignment = StringAlignment.Near Me.DrawMode = TreeViewDrawMode.OwnerDrawText Me.CheckBoxes = True End Sub Private Sub MyTreeView_DrawNode(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawTreeNodeEventArgs) Handles Me.DrawNode If e.Node.Nodes.Count > 0 Then Dim r As New Rectangle(e.Node.Bounds.Left - 14, e.Node.Bounds.Top, e.Node.Bounds.Width + 14, e.Node.Bounds.Height) e.Graphics.FillRectangle(New SolidBrush(Me.BackColor), r) e.Graphics.DrawString(e.Node.Text, Me.Font, New SolidBrush(Me.ForeColor), r, NodeStringFormat) Else Dim r As New Rectangle(e.Bounds.Left - 13, e.Bounds.Top + 1, 13, 13) ControlPaint.DrawCheckBox(e.Graphics, r, IIf(e.Node.Checked, ButtonState.Checked, ButtonState.Normal)) e.Graphics.FillRectangle(IIf(e.State And TreeNodeStates.Selected = TreeNodeStates.Selected, New SolidBrush(Color.Cyan), New SolidBrush(Me.BackColor)), e.Node.Bounds) e.Graphics.DrawString(e.Node.Text, Me.Font, New SolidBrush(Me.ForeColor), e.Bounds, NodeStringFormat) End If End SubEnd Class public class Form1 {
private MyTree TestTree = new MyTree();
private void Form1_Load(object sender, System.EventArgs e) { for (int i = 0; i <= 10; i++) { TreeNode n = TestTree.Nodes.Add("Node" + i.ToString); for (int j = 0; j <= 5; j++) { TreeNode nn = n.Nodes.Add("SubNode" + j.ToString); for (int m = 0; m <= 4; m++) { nn.Nodes.Add(m.ToString); } } } this.Controls.Add(TestTree); TestTree.Dock = DockStyle.Fill; }
} public class MyTree : TreeView {
StringFormat NodeStringFormat;
public MyTree() { NodeStringFormat = new StringFormat(); NodeStringFormat.LineAlignment = StringAlignment.Center; NodeStringFormat.Alignment = StringAlignment.Near;
无子节点的Node?
Public Class Form1 Private TestTree As New MyTree Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 0 To 10
Dim n As TreeNode = TestTree.Nodes.Add("Node" + i.ToString)
For j As Integer = 0 To 5
Dim nn As TreeNode = n.Nodes.Add("SubNode" + j.ToString)
For m As Integer = 0 To 4
nn.Nodes.Add(m.ToString)
Next
Next
Next
Me.Controls.Add(TestTree)
TestTree.Dock = DockStyle.Fill
End SubEnd ClassPublic Class MyTree
Inherits TreeView Dim NodeStringFormat As StringFormat Public Sub New()
NodeStringFormat = New StringFormat
NodeStringFormat.LineAlignment = StringAlignment.Center : NodeStringFormat.Alignment = StringAlignment.Near Me.DrawMode = TreeViewDrawMode.OwnerDrawText
Me.CheckBoxes = True
End Sub Private Sub MyTreeView_DrawNode(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawTreeNodeEventArgs) Handles Me.DrawNode
If e.Node.Nodes.Count > 0 Then
Dim r As New Rectangle(e.Node.Bounds.Left - 14, e.Node.Bounds.Top, e.Node.Bounds.Width + 14, e.Node.Bounds.Height)
e.Graphics.FillRectangle(New SolidBrush(Me.BackColor), r)
e.Graphics.DrawString(e.Node.Text, Me.Font, New SolidBrush(Me.ForeColor), r, NodeStringFormat)
Else
Dim r As New Rectangle(e.Bounds.Left - 13, e.Bounds.Top + 1, 13, 13)
ControlPaint.DrawCheckBox(e.Graphics, r, IIf(e.Node.Checked, ButtonState.Checked, ButtonState.Normal)) e.Graphics.FillRectangle(IIf(e.State And TreeNodeStates.Selected = TreeNodeStates.Selected, New SolidBrush(Color.Cyan), New SolidBrush(Me.BackColor)), e.Node.Bounds)
e.Graphics.DrawString(e.Node.Text, Me.Font, New SolidBrush(Me.ForeColor), e.Bounds, NodeStringFormat)
End If End SubEnd Class
public class Form1
{
private MyTree TestTree = new MyTree();
private void Form1_Load(object sender, System.EventArgs e)
{
for (int i = 0; i <= 10; i++) {
TreeNode n = TestTree.Nodes.Add("Node" + i.ToString);
for (int j = 0; j <= 5; j++) {
TreeNode nn = n.Nodes.Add("SubNode" + j.ToString);
for (int m = 0; m <= 4; m++) {
nn.Nodes.Add(m.ToString);
}
}
}
this.Controls.Add(TestTree);
TestTree.Dock = DockStyle.Fill;
}
} public class MyTree : TreeView
{
StringFormat NodeStringFormat;
public MyTree()
{
NodeStringFormat = new StringFormat();
NodeStringFormat.LineAlignment = StringAlignment.Center;
NodeStringFormat.Alignment = StringAlignment.Near;
this.DrawMode = TreeViewDrawMode.OwnerDrawText;
this.CheckBoxes = true;
}
private void MyTreeView_DrawNode(object sender, System.Windows.Forms.DrawTreeNodeEventArgs e)
{
if (e.Node.Nodes.Count > 0) {
Rectangle r = new Rectangle(e.Node.Bounds.Left - 14, e.Node.Bounds.Top, e.Node.Bounds.Width + 14, e.Node.Bounds.Height);
e.Graphics.FillRectangle(new SolidBrush(this.BackColor), r);
e.Graphics.DrawString(e.Node.Text, this.Font, new SolidBrush(this.ForeColor), r, NodeStringFormat);
}
else {
Rectangle r = new Rectangle(e.Bounds.Left - 13, e.Bounds.Top + 1, 13, 13);
ControlPaint.DrawCheckBox(e.Graphics, r, (e.Node.Checked ? ButtonState.Checked : ButtonState.Normal));
e.Graphics.FillRectangle((e.State & TreeNodeStates.Selected == TreeNodeStates.Selected ? new SolidBrush(Color.Cyan) : new SolidBrush(this.BackColor)), e.Node.Bounds);
e.Graphics.DrawString(e.Node.Text, this.Font, new SolidBrush(this.ForeColor), e.Bounds, NodeStringFormat);
}
}
}
vb下代码已测试
c#代码没有测试,是软件自动转换的。
希望对LZ有用。呵呵