代码之家  ›  专栏  ›  技术社区  ›  John V

如果OnPaint不能加载一次图片,为什么它不再被调用?

  •  8
  • John V  · 技术社区  · 6 年前

    protected override void OnPaint(PaintEventArgs e)
    {
        DrawChar(e.Graphics);
        base.OnPaint(e);
    }
    
    void DrawChar(Graphics g)
    {
        if (body != null)
        {
            g.DrawImage(body, X, Y);
        }
    }
    

    假设“body”为空-如果我删除DrawChar中的条件,程序将永远不会绘制任何内容,我发现onPaint甚至不再被提升(例如,在调整窗口大小或最小化窗口并还原窗口时)。

    1 回复  |  直到 6 年前
        1
  •  14
  •   Hans Passant    6 年前

    好像失败的DrawImage导致了一些错误状态

    另一个 程序中出现异常。这个问题

    执行此操作的方法是调用OnPaint()的方法,它是名为 Control.PaintWithErrorHandling() . 请看,您正确假设的错误状态被命名为state_EXCEPTIONWHILEPAINTING。当设置一次后,它总是返回PaintException(),它会画出失败的红十字。从而避免再次提出例外的风险。我将复制/粘贴评论:

        // Exceptions during painting are nasty, because paint events happen so often.
        // So if user painting code ----s up, we make sure never to call it again,
        // so as not to spam the end-user with exception dialogs.
    

    破折号用来拼写f-word,在开源之前清理源代码花了很长一段时间,当他们试图将其自动化时造成了相当大的损害:)

    推荐文章