加载表单时,CreateGraphics() 不应该返回一个图形对象吗?
我的意思是,我可以在 Form1_Load 事件上编写以下内容吗?
Graphics x;
private void Form1_Load(object sender, EventArgs e)
{
x = this.CreateGraphics();
}
如果不是,那是为什么?
我认为当您创建一个新表单时,constructor启动表单的所有对象。那么为什么不是图形对象呢?
我问这个,因为当我尝试在 form_load 上绘图时,它不会显示我绘制的内容。
主要原因是:我想创建一个游戏,它有一个棋盘 - 所以当用户点击新游戏时 - 首先 - 我正在启动棋盘并绘制它。 在 onPaint 事件中,我只想绘制面板的当前状态。所以我认为板的初始状态应该在 formLoad 事件上绘制。
最佳答案
您不应该以这种方式使用 Graphics 对象;您应该将它的每次使用都包含在一个 using block 中,或者确保在每组绘图操作之后处理它。您在此处的代码将留下一个不必要的 Graphics 对象。
简要示例:
private void MyonPaintOverload()
{
using(Graphics x = this.CreateGraphics())
{
// draw here...
}
}
此外,在 Form_Load()
上绘图将不起作用,因为此时窗口实际上并不可见;基本上没有什么可借鉴的。
是的,您通常需要在每个周期重绘整个 - 因为像将另一个窗口拖过您的窗口这样简单的事情会“删除”您的绘图,并且当它被另一个窗口无效时窗口被移开,您需要重绘您手动绘制的一切。
关于c# - Windows 窗体中的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033844/