完全に手動で (つまり、Visual Studio のデザイン ビューを使用せずに) 作成している C# フォームがあります。このフォームでは、次のように (単純に) 作成されたラベルがあります。
private Label myLabel = new Label();
コードの後半で、コールバック中に、このラベルの画像を設定したいと考えています。私はそれを行う1つの方法を見つけました。コードは次のとおりです。
myLabel.Image = Image.FromFile("Images\\mark.png");
これは機能しますが、問題は、アプリケーションを配布するときに、常にmark.pngを含むフォルダー ( Images ) を提供する必要があることです。
これは許容できると思いますが、実際には私が望んでいるものではありません...
興味深いのは、Visual Studio のデザイン ビューを使用して画像をラベルに追加するために作成した他のコードを見たところ、デザイナーではまったく異なる方法で行われることです。何らかの方法で画像を解析し、バイナリを計算し、このバイナリの base64 表現を文字列として.resxファイルに保存します。
<data name="fileDisconnect.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABkAAAAXCAYAAAD+4+QTAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAA10RVh0U291cmNlAE51dm9sYaxPNfEAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5F
...
...
ns2di2Jn545YY+PJHw3ZbmREJBgZLDwzgehomExoMpmUG1spVLuhAG/80RSKwyEGo7ZBJNKcsrf/Pd7Q
MOijAUML48mPeAPCJ5FKhMcSBOt9Ach5ThKVujqeQvEa8v8FrglBl5d/7zYAAAAASUVORK5CYII=
</value>
Designer ファイルのソース コードを見ると、イメージ ラベルが次のように設定されていることがわかります。
this.fileConnect.Image = ((System.Drawing.Image)(resources.GetObject("fileConnect.Image")));
したがって、ご覧のとおり、この方法で実行する方がはるかにエレガントです。イメージを実際にハード ディスクに保存して、アプリケーションを配信するときにイメージを提供する必要はありません。画像情報は.resxファイルに保存され、画像は.resxからバイナリ コンテンツをプログラムで取得するように設定されます。
私の質問は....コントロールを手動で作成している場合、どうすれば同じ種類の動作を得ることができますか? .resxファイルを作成し、HEX エディターで画像を開き、バイナリ文字列を.resxファイルにコピーできますか? 次に、画像をラベルに追加するときに、上記のようにするだけです。