在创建新对象时绘制图形

时间:2016-03-02 16:46:08

标签: c# drawing

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

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

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);
    }
}

这不会绘制任何东西,但是,如果我从另一个动作调用“绘图”方法,如按钮按下它可以工作的形式。 如果我覆盖我的控件的OnPaint方法并在此处调用“Draw”方法,它也可以工作。 (我知道我应该在Paint / OnPaint中绘制所有绘图,但我这样做只是为了尝试其他事情)

有什么区别?为什么我不能在任何地方调用我的“绘图”方法?

1 个答案:

答案 0 :(得分:1)

当您在构造函数中调用Draw()方法时,控件尚未添加到父级,只是内存中的对象,因此调用无效。

如果按照OnPaint()方法中的说法进行调用,则会绘制,因为只要需要渲染控件,就会调用此方法。