private void button2_Click(object sender, EventArgs e) { TreeLayout tl = new TreeLayout(); tl.Type = TreeLayoutType.Centered; tl.LinkStyle = TreeLayoutLinkType.Cascading3; tl.LevelDistance = 50; tl.NodeDistance = 60; tl.Arrange(diagram); foreach (DiagramLink link in diagram.Links) { link.TextColor = Color.Transparent; link.Text = "test " + link.ControlPoints[0].X.ToString(); } for (int z = diagram.Items.Count - 1; z >= 0; z--) { DiagramLink l = diagram.Items[z] as DiagramLink; if (l != null) { l.CustomDraw = CustomDraw.Additional; break; } } } private void diagram_DrawLink(object sender, DrawLinkEventArgs e) { System.Drawing.Brush textBrush = new System.Drawing.SolidBrush(Color.Black); System.Drawing.Brush backBrush = diagram.BackBrush.CreateGdiBrush(diagram.Bounds); foreach (DiagramLink l in diagram.Links) { int s = l.SegmentCount / 2; PointF p1 = l.ControlPoints[s]; PointF p2 = l.ControlPoints[s + 1]; PointF c = new PointF((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2); SizeF textSize = diagram.MeasureString(l.Text, l.Font, int.MaxValue, StringFormat.GenericDefault); float w = textSize.Width; float h = textSize.Height; RectangleF textRect = new RectangleF(c.X - w/2, c.Y - h/2, w, h); e.Graphics.FillRectangle(backBrush, textRect); e.Graphics.DrawString(l.Text, l.Font, textBrush, textRect, StringFormat.GenericDefault); } backBrush.Dispose(); textBrush.Dispose(); }