1

私は、階層構造でデータベース構造のグラフィカル表現を描画する C# win フォーム アプリケーションの開発に忙しくしています。

すべてが正常に機能していますが、スクロールに問題があります。ちらつきの問題があります。

以下のことを調べました。

C# グラフィックのちらつき

Invalidate()表面をリフレッシュしたいときに呼び出します (かなり役に立ちましたが、まだ少しラグがあります)

また、DoubleBufferedプロパティをTrueに設定するには(これに関する問題で、ArgumentException「パラメータが無効です。」というメッセージがスローされます。しかしDoubleBuffered、メインフォームでtrueに設定できます)

私のデザインの詳細

私には2つのクラスがNodeありLink、どちらにもGraphicsPathメンバーがあり、両方ともpublic void Draw(Graphics g)自分自身を描画するメソッドを持っています.

StructureMapメソッドをオーバーライドしたユーザーコントロール呼び出しもあり、描画関数の呼び出しprotected override void OnPaint(PaintEventArgs e)ごとにループします。Node親ノードはLinkオブジェクトによって子ノードにリンクされているため、ループは単純です。親ノードの draw メソッドを呼び出すだけで、そのすべての子ノードも再描画されます。

ヒットテストも同じ方法で実行しています。

もっと良い方法はありますか?DoubleBufferedユーザー コントロールで true に設定できないのはなぜですか?

PS: これは私の最初の投稿です。

4

3 に答える 3

1

DoubleBuffered ArgumentException は、グラフィックス オブジェクトをどこかに配置したことが原因で発生する可能性があります。

この記事も参照してください。ダブル バッファリングによってアプリが強制終了される原因は何ですか?

于 2012-07-06T11:44:26.137 に答える
0

ちらつきのような音は、画像を描画するために必要な処理量が原因です。

これを軽減する 1 つの方法は、モデルをオフスクリーン ビットマップに描画し、ペイント/スクロールなどでそのビットマップを画面に描画することです。

次に、モデルが変更された場合にのみビットマップを更新します。

于 2012-07-06T12:09:46.597 に答える