创建新对象时绘制图形

Drawing graphics when creating a new object

我玩了一些我创建的自定义控件,我想为它们绘制一些图形。

我实现了我想要的一切,但我有一个问题,因为我觉得有些事情很奇怪。 例如,我尝试制作一个像这样的新控件:

public class Square : Control
{
    public Square(Point location)
    {
        this.Size = new Size(100, 100);
        this.Location = location;
        Draw();
    }

    public void Draw()
    {
        Graphics g = this.CreateGraphics();
        g.DrawRectangle(Pens.Black, 5, 5, 20, 20);
    }
}

这不会绘制任何东西,但是,如果我从另一个操作调用 "Draw" 方法,例如在窗体上按下按钮,它就会起作用。 如果我重写控件的 OnPaint 方法并在此处调用 "Draw" 方法,它也会起作用。 (我知道我应该在 Paint/OnPaint 中完成所有绘图,但我这样做只是为了尝试其他事情)

有什么区别?为什么我不能随心所欲地调用 "Draw" 方法?

当你在constructor中调用Draw()方法时,控件还没有添加到parent中,只是内存中的一个对象,所以调用没有效果。

如果您按照您在 OnPaint() 方法中所说的那样进行调用,则绘制,因为每当需要渲染控件时都会调用此方法。