お世話になります。
VB6からVB.NETに移行作業をしております。
VB6では、
Picture1 に アイコンファイルを読み込んでおき
Me.Icon = Picture1.Image
とすることで、(Me はフォーム)
実行時にアイコンを変更することが出来ました。
VB.NETでは、
Me.Icon = Picture1.Image
の時点で、構文的にエラーとなってしまいます。
(System.Drawing.Icon 型 に System.Drawing.Image 型は代入できない)
アイコンをピクチャーにすることはできる(Me.Icon.ToBitmap)
のですが、ビットマップをアイコンにする方法が見あたりません。
最終的にやりたいことは、状況に応じて、アイコンを切り替える
ということがやりたい(正確には、フォームのアイコン表示と
ピクチャーボックス、ボタンなどでのビットマップ表示を行う)
のですが、予め使うアイコンの種類は10種類程度と決まってい
るので、外部ファイルとしてでなく内部的にリソースとしてもって
おきたいのです。
何か、解決のヒントをご教授いただけたらと幸いです。
以上、よろしくお願いいたします。
P.S.
イメージリストやピクチャーボックスにアイコンを読み込んだ時点で、
System.Drawing.Image 型として扱われるようです。
デザイン時にフォームのIconプロパティに直接読み込んで
アイコン表示されますので、icoファイルであることは間違いない
と思います。
> 外部ファイルとしてでなく内部的にリソースとしてもっておきたいのです。
それはつまり、VB6 でいうところの
Set Me.Icon = LoadResPicture(101, vbResIcon)
という事ですよね。
であれば、わざわざ PictureBox に読み込ませておかなくても、
そのまま Icon 型の内部リソースを渡してやるだけで済むかと。
<VB2005>
Me.Icon = My.Resources.Icon1
# 2002/2003 の場合は、Assembly.GetManifestResourceStreamメソッドで。
魔界の仮面弁士様。お世話になります。
>それはつまり、VB6 でいうところの
> Set Me.Icon = LoadResPicture(101, vbResIcon)
>という事ですよね。
>
>であれば、わざわざ PictureBox に読み込ませておかなくても、
>そのまま Icon 型の内部リソースを渡してやるだけで済むかと。
恥ずかしながら、VB6で リソースエディタがあることも
LoadResPicture なる便利な関数があることも知りませんでした(汗)
それで、いままで、ずっとピクチャーボックスに予めiconを
格納しておき、実行時に切り替えておりました。
内容的には同じことがやりたいことになりますね。
><VB2005>
>Me.Icon = My.Resources.Icon1
>
># 2002/2003 の場合は、Assembly.GetManifestResourceStreamメソッドで。
VB2003 でした。2005と仕様に違いがあるようで以後記載時に気をつけます。
まだ、解決していないですが、
Assembly.GetManifestResourceStream の使い方を調べていたら、それっぽいのを見つけました↓
http://santamartadotnet.hp.infoseek.co.jp/documents/vbdotnet/resourceandmultimedia.html
ちょっと、このサンプルというか、操作そのものを確認しながらやってみます。
また、状況が変わりましたら、ご報告致します。ありがとうございました。
お世話になります。上記リンクのサンプルが、そのものズバリでした。
私のように、リソースの使い方とか、わかってなかった人には、
以下がポイントでしょうか。
(VB2003で確認)
■リソースをプロジェクトに追加してプロパティの
ビルドアクションを”埋め込まれたリソース”にする。
■GetManifestResourceStreamの使い方
System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream("AprName.Icon1.ico")
ここで、AprName には、プロジェクトのプロパティで確認できる
ルート名前空間の名前が入るようです。
(プロパティで表示される アセンブリ名ではない)
アセンブリとかちゃんと勉強しないとダメかも・・・。
■GetManifestResourceStreamで取得したSystem.IO.Streamオブジェクトを使ってIconが作れる。
icon = New Drawing.Icon(stream)
msdnで、マニフェストリソースとか読んでも、つかみ所がなく理解できなかったので、同じようなところで悩んでいる方の参考にでもなれば幸いです。
ピンポイントで重要なヒントを下さった魔界の仮面弁士様、ありがとうございました。大変勉強になり、また助かりました。
ツイート | ![]() |