C# 自定义控件OnPaint不会启动
我有以下自定义C# 自定义控件OnPaint不会启动,c#,winforms,graphics,onpaint,C#,Winforms,Graphics,Onpaint,我有以下自定义控件: public class Line : Control { protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); using (var p = new Pen(Color.Black, 3)) { var point1 = new Point(234, 118); var poi
控件
:
public class Line : Control
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (var p = new Pen(Color.Black, 3))
{
var point1 = new Point(234, 118);
var point2 = new Point(293, 228);
e.Graphics.DrawLine(p, point1, point2);
}
}
}
以及一个表单
,其中我添加了行
类的一个新实例作为新控件:
Controls.Add(new Line());
问题是没有调用OnPaint方法,也没有画线。为什么?如何修复它?您没有给它一个大小,尝试创建一个构造函数并在那里设置一个默认大小,您似乎也在使用父控件坐标,我会使用Usercontrol的位置来设置您的开始位置,只关心包含行所需的控件的宽度和高度
public Line()
{
Size = new Size(500, 500);
}
好吧,它是有效的,但我有一个奇怪的问题。。。我可以画一条线:如果我添加另一个控件,它就不是画。。。我刚刚添加了另一个
控件代码>指令(在第一个指令之后)。你知道为什么吗?可能放在同一个位置,你正在做的是创建一个具有正方形区域的控件,并且根据第二个控件的坐标,它可能被覆盖。好的,但是假设我必须画两条线才能显示字符X
,我的两个控件具有相同的大小(例如50x50)和相同的位置(只有两行具有不同的坐标)。如何显示第二行而不覆盖另一行?这是使用winforms的缺点之一,您没有真正的透明度。最好在同一控件上绘制x,在容器上绘制,或安装并使用线型