アイコンを設定するには

解決


へろへろ  2006-06-13 21:21:31  No: 131835

お世話になります。
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ファイルであることは間違いない
と思います。


魔界の仮面弁士  2006-06-13 21:50:24  No: 131836

> 外部ファイルとしてでなく内部的にリソースとしてもっておきたいのです。
それはつまり、VB6 でいうところの
  Set Me.Icon = LoadResPicture(101, vbResIcon)
という事ですよね。

であれば、わざわざ PictureBox に読み込ませておかなくても、
そのまま Icon 型の内部リソースを渡してやるだけで済むかと。

<VB2005>
Me.Icon = My.Resources.Icon1

# 2002/2003 の場合は、Assembly.GetManifestResourceStreamメソッドで。


へろへろ  2006-06-13 23:44:36  No: 131837

魔界の仮面弁士様。お世話になります。

>それはつまり、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

ちょっと、このサンプルというか、操作そのものを確認しながらやってみます。
また、状況が変わりましたら、ご報告致します。ありがとうございました。


へろへろ  2006-06-14 00:33:58  No: 131838

お世話になります。上記リンクのサンプルが、そのものズバリでした。

私のように、リソースの使い方とか、わかってなかった人には、
以下がポイントでしょうか。
(VB2003で確認)

■リソースをプロジェクトに追加してプロパティの
  ビルドアクションを”埋め込まれたリソース”にする。

■GetManifestResourceStreamの使い方
 System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream("AprName.Icon1.ico")
  ここで、AprName  には、プロジェクトのプロパティで確認できる
  ルート名前空間の名前が入るようです。
  (プロパティで表示される  アセンブリ名ではない)
  アセンブリとかちゃんと勉強しないとダメかも・・・。

■GetManifestResourceStreamで取得したSystem.IO.Streamオブジェクトを使ってIconが作れる。

  icon = New Drawing.Icon(stream)

msdnで、マニフェストリソースとか読んでも、つかみ所がなく理解できなかったので、同じようなところで悩んでいる方の参考にでもなれば幸いです。

ピンポイントで重要なヒントを下さった魔界の仮面弁士様、ありがとうございました。大変勉強になり、また助かりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加