Windows 窗体中的图形

Eli*_*ior 1 .net c# winforms form-load

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

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

Graphics x;
private void Form1_Load(object sender, EventArgs e)
{
    x = this.CreateGraphics();
}
Run Code Online (Sandbox Code Playgroud)

如果不是,那为什么?

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

我这么问是因为当我尝试在 form_load 上绘制时,它不会显示我绘制的内容。

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

And*_*ber 5

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

简要示例:

private void MyonPaintOverload()
{
    using(Graphics x = this.CreateGraphics())
    {
        // draw here...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

是的,您通常需要在每个周期重新绘制整个内容- 因为像将另一个窗口拖过您的窗口这样简单的事情就会“擦除”您的绘图,并且当另一个窗口被移开而使其无效时,您需要重新绘制所有内容您手动绘制的。