0

私はwinformsアプリケーションを持っています。多くのアイコンを持つユーザーコントロールがあります。ユーザーはこのコントロールをフォームに (タブ付きレイアウトで) 何度でもロードできます。現在、コントロールが作成されるたびにアイコンをロードしています(アプリでは最大50回になる可能性があります)。これらのアイコンをアプリケーションにキャッシュする方法はありますか。これを行った場合、これが問題になりつつあるため、使用しているgdiハンドルの数が減りますか。

4

2 に答える 2

2

アイコンごとにシングルトン クラスを作成できます。ハンドルを作成する最初の参照。以降の呼び出しでは、既存のハンドルが使用されます。

ユーザー コントロールについて詳しく知らなければ、次の提案は非常に一般的なものにすぎません。しかし、すべてのアイコンを描画する単一のビットマップ レイヤーを持つこともできます。ユーザー コントロールの残りの要素は、このビットマップの上と周囲に存在します。

残念ながら、この考えはパフォーマンス面で問題がある可能性があります。アイコンの配置にすぐに使用できるコードをリファクタリングする必要があります。最後に、制御フォーム構造を持つフレームワークが理想的に機能する方法から、それは非制度的です。

CAM ソフトウェアに同梱されているパラメータ形状の入力フォームで、リソースの問題が発生しました。テキスト入力が多すぎると、さまざまな形式の奇妙さとリークが発生しました。そのため、代わりに、テキスト エントリのように見え、1 つのテキスト エントリ (およびコンボ ボックス エントリも) を持つ境界線を持つラベルを作成しました。ユーザーがタブ、入力、またはクリックすると、単一のテキスト エントリが新しいエントリに移動し、前のエントリのラベルが設定されました。

これは、通常のコーディング方法よりも完全に非直感的なセットアップですが、リソースの問題に対処する唯一の方法でした。

私の経験では、数十または数百のエントリを処理する必要があり、別の設計を使用して問題に取り組む必要がある場合、GUI フレームワークには問題があるようです。

于 2008-11-28T03:11:24.173 に答える
0

問題が「アイコン」の数である場合 (ここで何を意味するのかわからない)、Image-Lists を使用できます。たとえば、Listview コントロールは、各項目の完全なコピーを保持する代わりに、イメージ リスト内のアイコンを参照できます (ただし、これがケースに当てはまるかどうかはわかりません)。

于 2012-05-08T16:14:44.143 に答える