質問

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

役に立ちましたか?

解決

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

ユーザーコントロールについて詳しく知ることなく、次の提案は非常に一般的なものになります。ただし、すべてのアイコンを描画する単一のビットマップレイヤーを作成することもできます。ユーザーコントロールの残りの要素は、このビットマップの上および周囲に存在します。

残念ながら、この考えはパフォーマンスの点で問題があるかもしれません。アイコンを配置するためにすぐに使用できるコードをリファクタリングする必要があります。最後に、制御形式の構造を持つフレームワークが理想的にどのように機能するかから、それは非主体的です。

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

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

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top