我注意到在C#中,我可以通过几种不同的方式处理事件,但是我不确定哪种方式最适合使用,请看这里:

this.Paint += Form1_Paint;

void Form1_Paint(object sender, PaintEventArgs e)
{
        Graphics g = e.Graphics;
        g.DrawEllipse(new Pen(Color.Red, 20), new Rectangle(50, 100, 50, 100));
}


要么

protected override void OnPaint(PaintEventArgs e)
{
    Graphics g = e.Graphics;
    g.DrawEllipse(new Pen(Color.Red, 20), new Rectangle(50, 100, 50, 100));
}


当然,这两者都会产生相同的结果,并且OnPaint()通常会通过委托调用Form1_Paint方法(如果我没有更改的话)。

但是,哪一种是最佳使用方式?

谢谢

最佳答案

首选方法是重写OnPaint方法,而不是注册到Paint事件。这样,您就不会将delegate耦合到Paint控件。

MSDN


  引发事件将通过委托调用事件处理程序。有关更多信息,请参见处理和引发事件。
  OnPaint方法还使派生类无需附加委托即可处理事件。这是在派生类中处理事件的首选技术。
  
  对继承者的说明:
  在派生类中重写OnPaint时,请确保调用基类的OnPaint方法,以便已注册的委托接收事件。

10-06 13:48
查看更多