6

我不确定使用图形的最佳方式是什么 - 我应该将我的类附加到主窗体 Paint 事件然后进行绘图,还是像这样从覆盖的 OnPaint void 调用它更好?我的意思是,这样做可以吗:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e)  //what is this good for? My app works without it as well
    Graphics g=e.Graphics;
    DrawEnemies(g);
    UpdateHUD(g);
    DrawSelectedUnit(g);
}
4

2 回答 2

5

建议控件覆盖On...方法而不是订阅自己的事件。

您应该调用base.OnPaint以确保Paint正确触发该方法。

来自 MSDN

OnPaint 方法还使派生类能够在不附加委托的情况下处理事件。这是在派生类中处理事件的首选技术。

对继承者的说明
在派生类中重写 OnPaint 时,请务必调用基类的 OnPaint 方法,以便注册的委托接收事件。

于 2010-07-07T14:00:13.460 回答
5

这并不重要;两者都有效。从理论上讲,覆盖OnPaint可能会稍微快一点,但这并不是任何人都会注意到的差异。Microsoft 建议覆盖OnPaint,但并没有真正激励这一点。

您需要调用base.OnPaint,因为此方法将调用附加到Paint事件的处理程序。

于 2010-07-07T14:02:14.533 回答