自定义的控件,继承自System.Windows.Form.Control。希望能背景透明,目的是不遮住相邻的控件。该控件是两个节点之间的连线控件,在代码中通过计算得出的一个长条形Region,如图所示,下方的连线控件的边框遮住了上方的控件部分内容。
该控件已经设置了
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;
为何没有任何效果?背景仍然是白色的.
线条的绘制过程是这样的:线条控件注册了两个节点的移动事件,在节点移动的时候,线条触发重新计算Region过程和重绘过程.
绘制线条的代码如下,这里的From和To分别是线条两端的节点,RectLineCul是一个计算类,GetCenterLineRegion是计算出线条的起始位置,两个节点的中心连线穿过节点边框的交界点作为线条的起始位置.
protected override void OnPaint(PaintEventArgs e)
{
var cul = new RectLineCul(
new RectangleF(new Point(From.Location.X - Left, From.Location.Y - Top), From.Size),
new RectangleF(new Point(To.Location.X - Left, To.Location.Y - Top), To.Size));
PointF start, end;
cul.GetCenterLineRegion(out start, out end);
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
var pen = new Pen(this.Focused ? Brushes.DarkRed : Brushes.Blue, 5);
pen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
e.Graphics.DrawLine(pen, start, end);
//base.OnPaint(e);
}
结点用的是Button控件吗?
线条你用的是什么控件?
其实想用WPF的.