0

C# を使用してグラフィックを表示する複数のパネルを持つ Windows フォームを作成しています。

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:最小化された状態からウィンドウを最大化しているときに操作が正常に完了しました。

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 に答える