0

完全に手動で (つまり、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ファイルにコピーできますか? 次に、画像をラベルに追加するときに、上記のようにするだけです。

4

1 に答える 1

0

画像を Resources に保存する場合は、次のようにするだけです。

        Label myLabel = new Label();
        myLabel.Text = "whatever";
        myLabel.Image = Properties.Resources.MyLabelImage;
        this.Controls.Add(myLabel);
于 2012-08-22T03:31:29.753 に答える