2011-12-09 21 views
1

私はTreeViewを含むWindowsフォームを持っています。ツリービューには、ノードの画像がプロジェクトに埋め込まれています。私の開発マシン(Visual Studioの内部と外部)でフォームを実行すると、正常に実行され、それぞれの適切なイメージが表示されます。プロダクションボックスで実行すると、埋め込まれた画像を読み込もうとするとエラーが発生します。ツリーがまだ表示されている場合にイメージを使用しないというロジックを追加しましたが、問題の内容と解決方法を把握したいと思います。.NET埋め込み画像の問題

新しいビットマップを作成しようとすると、返されるエラーメッセージは一般的な「パラメータが無効です」です。スタックトレースは、 "System.Drawing.Bitmap..ctor(Type type、String resource)"という行に失敗の原因を示します。以下のコードを参照してください。

ImageList imageListNodes = new ImageList(); 
Bitmap mIcon; 
mIcon = new Bitmap(this.GetType(), "m2.ico"); // This is the line that fails. 
imageListNodes.Images.Add("m", (Image)mIcon); 
tvRecords.ImageList = imageListNodes; // This is the treeview used in the form. 

ファイルm2.icoがプロジェクトに直接追加されました。そのプロパティには、ビルドアクション=組み込みリソース、出力ディレクトリにコピー=コピーしないなどがあります。

私の開発コンピュータはWindows 7を実行しており、本番環境はWindows Server 2003 SP2でCitrix環境です。このプロジェクトは.NET 3.5にあります。両方とも.NET 3.5です。このフォームは異なるクライアントマシンで使用できるため、Server 2003以降で動作するはずです。

ありがとうございました!

EDIT: 数分で既にこの設定がまったく機能しないことが示唆されています。上記のことは、Visual Studioのデバッグモードと、それ自身で呼び出されたときの両方で、私のコンピュータ上で動作することに注意しました。アイコンファイル自体はネットワーク共有上に存在しないため、DLLがそれらを引き込むことはできません。ファイルを正しく埋め込む必要があり、ビットマップ/アイコンの変換が正しく機能している必要があります。そうしないと、マシン上でビットマップ/アイコンの変換がまったく機能しません。

私は提案を高く評価し、同じ目標を達成するための他の方法を試してみたいと思いますが、少なくとも私の最初の質問は少なくとも私のコンピュータでは動作しますが、別のものではないことに注意してください。ありがとう!

+0

生成されたexeをILspyまたはリフレクターで調べて、リソースが実際に展開されたアセンブリに含まれているかどうかを確認します。 –

答えて

0

ビットマップではなく、アイコンクラスを使用してみてください。私は彼らが互換性があるとは思わない。

編集:ちょうど何かを覚えていました...アイコンは複数の画像形式です。それらはビットマップですが、異なる解像度で複数の画像を含むことができます。しかし、@ PedroC88のように、ToBitmapを呼び出すと変換されます。私はどのサイズが使用されているかはシステムによって決まると思いますが、あなたは選択できません。

+0

サイズを変換するには、 'Graphics'オブジェクトを使用して新しいビットマップに描画することができます。品質を落とさないように必要なプロパティを調整することを忘れないでください。 http://amzn.to/rtwL5V – PedroC88

1

ちょうどそのような画像に.icoを読み込むことはできません。 Iconオブジェクトに最初にアイコンをロードしてから、Icon.ToBitmapを呼び出してイメージを取得してみてください。

関連する問題