gpt4 book ai didi

c# - 当我们覆盖 OnPaint 时,我们什么时候应该调用 base.OnPaint()?

转载 作者:太空狗 更新时间:2023-10-29 21:06:13 25 4
gpt4 key购买 nike

我想知道在windows窗体程序中覆盖OnPaint时应该什么时候调用base.OnPaint?

我正在做的是:

  private void Form1_Paint(object sender, PaintEventArgs e)
{
// If there is an image and it has a location,
// paint it when the Form is repainted.
base.OnPaint(e);

}

我收到 stackoerflowexception,为什么?

最佳答案

您没有覆盖 OnPaint() 方法。您只是订阅了 Paint 事件,所以您不应该调用 base.OnPaint()
您应该(可以)仅在覆盖表单的 OnPaint() 方法时调用 base.OnPaint():

protected override OnPaint(PaintEventArgs e)
{
base.OnPaint(e);

// ... other drawing commands
}

Windows 窗体控件上的 OnPaint 方法实际上会引发控件的 Paint 事件并绘制控件表面。通过在 Paint 事件处理程序中调用基本表单的 OnPaint 方法,您实际上是在告诉表单一次又一次地调用 Paint 处理程序,并且所以您将陷入无限循环,因此会出现 StackOverflowException

当您覆盖控件的 OnPaint 方法时,通常您应该调用基方法,让控件自行绘制并调用订阅到 Paint 的事件处理程序事件。如果不调用基方法,一些控件方面不会被绘制,也不会调用事件处理程序。

关于c# - 当我们覆盖 OnPaint 时,我们什么时候应该调用 base.OnPaint()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9238914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com