我的流程箭头是这么做的,自定义控件,关键点,计算一个Region,也就是斜线向两边偏移一点构成的区域,重载OnPaint,既然是控件,自然支持鼠标操作,最最关键的是很省事啊。摘录代码如下供参考: public partial class FlowLine : UserControl { /// <summary> /// 线的起点(线矩形框为坐标系) /// </summary> private Point StartPoint; /// <summary> ///线的终点(线矩形框为坐标系) /// </summary> private Point EndPoint; protected override void OnPaint(PaintEventArgs e) { this.Region = GetWindowRegion(); //根据起点 终点获得闭合区域 this.BackColor = Color.Transparent; Pen pen = new Pen(Color.DodgerBlue, (float)1.5); if (selected) { pen.Width = 2; pen.Color = Color.Blue; } e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; pen.DashStyle = this.lineStyle; if (pen.DashStyle == DashStyle.Dash) { pen.Color = Color.Gray; } pen.CustomEndCap = new AdjustableArrowCap(5, 8); e.Graphics.DrawLine(pen, StartPoint, EndPoint); base.OnPaint(e); } private Region GetWindowRegion() { Point[] pts = new Point[5]; GetParallelPoint(out pts[0], out pts[1], offset); //起点终点 向上平行点 GetParallelPoint(out pts[3], out pts[2], -offset); //起点终点 向下平行点 pts[4] = pts[0]; //闭合区域 GraphicsPath path = new GraphicsPath(); path.AddLines(pts); return new Region(path); } }
现在有一个项目是这样的,winform开发的控制火车轨道的项目,里面的轨道都是用label标签弄的,现在遇到一个问题,就是道岔的地方没法弄,如果用gdi+画出来,就没法实现点击这个道岔,对它进行一些属性设置,比如Name或者右键事件,想问问大家有没有什么方法可以让道岔或者斜线能像操作winform控件一样对它进行各种属性设置和事件操作吗? wpf可以实现label倾斜,但是目前没法换,只能用winform
[quote=引用 3 楼 nan1988113 的回复:] 道岔我写成了自定义控件,然后在自定义控件里面用gdi画线,但是有些单独斜着的线没法弄
110,538
社区成员
642,577
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧