1

加载表单时CreateGraphics()不应该返回图形对象吗?

我的意思是,在 Form1_Load 事件中,我可以编写例如以下内容吗?

Graphics x;
private void Form1_Load(object sender, EventArgs e)
{
    x = this.CreateGraphics();
}

如果不是,那为什么?

我以为当你创建一个新表单时,构造函数会启动表单的所有对象。那么为什么不是图形对象呢?

我在问这个问题,因为当我尝试绘制时 - 在 form_load 上,它并没有显示我绘制的内容。

主要原因是:我想创建一个有棋盘的游戏——所以当用户点击新游戏时——首先——我正在启动棋盘并绘制它。在onPaint事件中,我只想绘制电路板的当前状态。所以我认为板子的初始状态应该是在formLoad事件上绘制的。

4

1 回答 1

4

您不应该以这种方式使用 Graphics 对象;您应该将它的每次使用都包含在 using 块中,或者确保在每组绘图操作之后将其丢弃。您在此处的代码将留下一个不必要的 Graphics 对象。

简要示例:

private void MyonPaintOverload()
{
    using(Graphics x = this.CreateGraphics())
    {
        // draw here...
    }
}

此外,绘图Form_Load()不起作用,因为此时窗口实际上是不可见的;基本上没有什么可借鉴的。

是的,您通常需要在每个循环中重绘整个东西- 因为像在您的窗口上拖动另一个窗口这样简单的东西会“抹掉”您的绘图,并且当它因另一个窗口被移走而无效时,您需要重绘所有内容您手动绘制的。

于 2013-02-22T21:59:51.770 回答