1

四角パズルを解くための Windows Forms アプリケーションを作成しました。現時点では、パズル グリッドは PaintEventHandler を使用して、アプリのメイン ウィンドウの Panel に描画されます。PaintEventHandler によって呼び出されるメソッドは、呼び出されるたびにグリッド全体を再描画します。このアプローチは機能しますが、ちらつきがあり非効率的であり、よりスムーズなものに置き換えたいと考えています。

私は Qt で多くの同様のアプリケーションを作成しました。Qt では、QCanvas と QCanvasView を作成します。次に、QCanvas にオブジェクトを追加したり、QCanvas からオブジェクトを削除したり、QCanvasView でupdate()メソッドを呼び出して、ちらつきなしで変更が有効になることを確認できます。

私が試した代替アプローチの 1 つはGraphics、Panel の描画に使用されるオブジェクトへの参照を保持し、Paint イベントの外部で描画を試みることでした。これはうまくいきませんでした: 役に立たないArgumentException: Parameter is not valid例外が発生しました。これは、アプリがその時点で描画を行うことを期待していなかったため、Windows によってスローされたとしか思えません。

QCanvas for Windows Forms に似たものはありますか? そうでない場合、パズル グリッドを更新するにはどのような方法を使用すればよいですか?

4

2 に答える 2

1

Paint通常、WindowsForms コントロールのイベントには、コントロールの必要な部分のみを再描画するように設定されたコンテキスト領域があります。これを true に設定することと組み合わせると、DoubleBuffered通常、ほとんどの再描画の問題に十分対応できます。

Graphicsまた、ペイント イベントが終了すると、キャッシュしているオブジェクトが Disposed であるため、例外が発生します。

DoubleBuffering が十分でない場合、実行可能なアプローチの 1 つはBitmap、Paint イベントで画面上にペイントするときに、オフスクリーンに描画を行うことです。または、ビットマップを でホストしPictureBox、再描画を自動的に行います。

于 2009-02-15T23:52:24.803 に答える
0

v.quick 考え - PyQt を試してみるのはどうですか? QCanvas と QCanvasView はどのプラットフォームでも適切に動作するはずです

于 2010-10-11T15:03:40.627 に答える