0

私たちのアプリケーションでは、行のすべてのセルは、ペイント中に初期化されたユーザー コントロールです。

何度もスクロールしたり、最大化/最小化したりすると、セルを行ごとに再描画し、カウントのピークとアプリケーションのクラッシュを処理しようとしました。

ここで質問: 少しスクロールすると、すべての行に対して onpaint() が呼び出されますが、ビューから移動された行 (最大化されたウィンドウに表示されるのは 20 行のみ) はどうすれば破棄できますか?

UI コンストラクターはロード時に 1 回呼び出されましたが、その後はペイントのみがトリガーされました。

すべてのセルをユーザー コントロールとして持つグリッドを考えてみましょう。ウィンドウを最大化/最小化するか、グリッドをスクロールすると、GDI カウントは一定のままですが、すべてのコントロールが再起動され、ハンドル リークが発生します。

4

1 に答える 1

2

OnPaint通常、何度も呼び出され、制御できませ。したがって、内部にコントロールを作成するOnPaintことはお勧めできません。(あなたの場合、同じ場所に同じコントロールがたくさんあるに違いないと思います)

コントロールを作成するには、フォームのコンストラクター、Form.Loadイベント、またはユーザー主導のイベント (ボタン、メニュー、ツールバーなどをクリック) を使用します。

于 2013-08-12T05:35:14.520 に答える