我注意到在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方法,以便已注册的委托接收事件。