Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义控件OnPaint不会启动_C#_Winforms_Graphics_Onpaint - Fatal编程技术网

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,在容器上绘制,或安装并使用线型