2009-05-27 7 views
3

vb.netのフォームに48x48の解像度でアイコンを表示するにはどうすればよいですか? 私はimagelistを使って調べましたが、コードを使ってリストに追加したイメージを表示する方法と、フォーム上の座標を指定する方法はわかりません。 私はいくつかのGoogle検索を行ったが、例のどれもが私が知る必要があるものを実際に示していない。vb.netのフォームにアイコンを表示

答えて

7

あなたはアルファ透明度(時をサポートする画像フォーマットを持っている場合、イメージリストが理想的ではありません:あなたは、PCTと呼ばれるピクチャを持っていると仮定すると

少なくともこれは事実であった;私は最近それらをあまり使用しなかった)、あなたはおそらくディスク上のファイルまたはリソースからアイコンをロードする。

' Function for loading the icon from disk in 48x48 size ' 
Private Function LoadIconFromFile(ByVal fileName As String) As Icon 
    Return New Icon(fileName, New Size(48, 48)) 
End Function 

' code for loading the icon into a PictureBox ' 
Dim theIcon As Icon = LoadIconFromFile("C:\path\file.ico") 
pbIcon.Image = theIcon.ToBitmap() 
theIcon.Dispose() 

' code for drawing the icon on the form, at x=20, y=20 ' 
Dim g As Graphics = Me.CreateGraphics() 
Dim theIcon As Icon = LoadIconFromFile("C:\path\file.ico") 
g.DrawIcon(theIcon, 20, 20) 
g.Dispose() 
theIcon.Dispose() 

更新:あなたはそれをディスクからロードする場合は、この方法を使用することができますあなたの代わりにあなたのアセンブリ内の埋め込みリソースとしてのアイコンを持つようにしたい場合は、それは代わりに次のようになりますように、あなたはLoadIconFromFile方法を変更することができます:

Private Function LoadIconFromFile(ByVal fileName As String) As Icon 
    Dim result As Icon 
    Dim assembly As System.Reflection.Assembly = Me.GetType().Assembly 
    Dim stream As System.IO.Stream = assembly.GetManifestResourceStream((assembly.GetName().Name & ".file.ico")) 
    result = New Icon(stream, New Size(48, 48)) 
    stream.Dispose() 
    Return result 
End Function 
+0

ありがとうございます、あなたのpictureboxメソッドは完全に機能しました。 – MaQleod

2

画像をフォームに配置するコントロールが必要です。

これで、表示するイメージ、ディスク上のファイル、イメージリスト、またはリソースファイルのイメージプロパティを設定できます。

pct.Image = Image.FromFile("c:\Image_Name.jpg") 'file on disk 

または

pct.Image = My.Resources.Image_Name 'project resources 

または

pct.Image = imagelist.image(0) 'imagelist 
0
Me.Icon = Icon.FromHandle(DirectCast(ImgLs_ICONS.Images(0), Bitmap).GetHicon()) 
+2

ようこそスタックオーバーフロー。あなたの答えを具体的に教えてください –

+0

私のためにあなたのポストワークは素晴らしいです! Thx – RicardoBalda

+0

これは本当に役に立たない。何も説明されていない1行とVisual Basicで構文エラーが表示されます。あなたはこの答えを利用するためにあなたの心を読むことになっていますか? (-1) – thebunnyrules

0

あなたは同じことを行うためにラベルコントロールを使用することができます。私は、ピクチャボックスコントロール内の画像に点を描画するために使用しました。 PictureBoxを使用するよりオーバーヘッドが少なくなる可能性があります。

 Dim label As Label = New Label() 
     label.Size = My.Resources.DefectDot.Size 
     label.Image = My.Resources.DefectDot ' Already an image so don't need ToBitmap 
     label.Location = New Point(40, 40) 
     DefectPictureBox.Controls.Add(label) 

これを行う最善の方法は、OnPaintメソッドを使用することです。

Private Sub DefectPictureBox_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DefectPictureBox.Paint 
    e.Graphics.DrawIcon(My.Resources.MyDot, 20, 20) 
End Sub 
関連する問題