首页 新闻 会员 周边

Winfrom自定义控件透明

0
悬赏园豆:100 [已关闭问题] 关闭于 2011-08-09 10:21

自定义的控件,继承自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);
}
一味的主页 一味 | 初学一级 | 园豆:150
提问于:2011-08-03 15:22
< >
分享
所有回答(2)
0

结点用的是Button控件吗?

线条你用的是什么控件?

刺客之家 | 园豆:196 (初学一级) | 2011-08-03 17:24
线条和节点都是自定义的Control.
节点没有问题,主要是线条会相互遮挡,因为线条上带有箭头,难以精确的计算出线条的Region,采用了比线条宽的一个长方形Region.正是这长条形的Region遮住了其他的线条
支持(0) 反对(0) 一味 | 园豆:150 (初学一级) | 2011-08-03 18:12
0

其实想用WPF的.

胖子黎 | 园豆:205 (菜鸟二级) | 2011-08-05 01:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册