0

我正在创建一个带有多个面板的 Windows 窗体以使用 C# 显示图形。

try
{
    if (myBuffer != null)
        myBuffer.Dispose();
    myBuffer = currentContext.Allocate(this.panel1.CreateGraphics(), this.panel1.DisplayRectangle);
}
catch (Win32Exception ex)
{
    MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

这是正在使用的代码。

我收到此错误System.ComponentModel.Win32Exception: The Operation Complected successfully同时从最小化状态最大化窗口。

4

1 回答 1

1

BufferedGraphicsContext 类是一个应该在内部进行的实现细节。它没有足够的弹性来应对诸如为无形控件创建错误之类的错误。显然,它的异常报告也没有得到足够好的调试,这对于不会经常出错的代码来说并不少见。

显然,您这样做是为了双缓冲面板控件,默认情况下它们不是。只需创建您自己的控件,从 Panel 派生。向您的项目添加一个新类并粘贴如下所示的代码。编译并将添加到工具箱顶部的新控件拖放到表单上,替换现有的控件。

using System;
using System.Windows.Forms;

class BufferedPanel : Panel {
    public BufferedPanel() {
        this.DoubleBuffered = true;
    }
}
于 2012-07-07T13:09:38.703 回答