2011-03-18 40 views
4

我看过的地方,CreateGraphics()会做这个步骤我们:的createGraphics()方法和Paint事件参数

  1. BeginPaint的
  2. 绘图
  3. 调用EndPaint

我有这样的代码这样的:

private void Form1_Load(object sender, EventArgs e) 
{ 
    grFrom = this.CreateGraphics(); 
    grFrom.FillRectangle(Brushes.Red, this.ClientRectangle); 
} 

没有红色的矩形......但是,当我在Form1_paint下面复制下面的行时,每件事情都可以正常运行。

grFrom.FillRectangle(Brushes.Red, this.ClientRectangle); 

所以问题就在这里: 什么是Form1_painte.Graphics

CreateGraphics or e.Graphics

回答

5

两件事情:

  1. CreateGraphics为您提供了一个图形对象,你应该总是Dispose()退出之前。你应该把你的语句放在一个使用块中。
  2. 您绘制的图形只有在表单重新绘制之后才有效。在你的情况下,通过在Form_Load中调用它,它发生在第一次渲染之前,并被“扔掉”。你应该总是把它放在OnPaint()中,以便让它在屏幕上“持久”,因为当控件重绘时会导致它重绘。
0

您正在创建一个新的图形对象,它最有可能由内存缓冲区支持。您从e.Graphics获得的图形对象由一个缓冲区支持,该缓冲区表示当前窗口(如窗口句柄中的窗口,而不是带标题栏的窗口等)的屏幕区域。

您始终可以将来自创建的图形对象的数据与位于e.Graphics之间的数据进行比较。

我相信有人会阐述比我更多的东西。

1

您的表单加载调用正在绘制到表单,但随后第一个常规表单绘画事件将其写入其中,因此您从不会看到它。 (由于这种情况您的形式呈现在众人面前)

所以问题就在这里:什么是form1_paint的

e.Graphics?

CreateGraphics or e.Graphics?

我相当确定是equivilent,你需要的是更好的理解windows窗体事件生命周期。

此答案的相关链接: WinForms event life cycle