2009-05-27 89 views
3

如何在vb.net窗體上以48x48分辨率顯示圖標? 我看着使用imagelist,但我不知道如何顯示使用代碼添加到列表中的圖像以及如何在窗體上指定它的座標。 我做了一些谷歌搜索,但沒有任何例子真正顯示我需要知道的。在vb.net窗體上顯示圖標

回答

7

ImageList中是不理想的,當你有圖像格式支持阿爾法透明度(在至少它曾經是這種情況;最近我沒有使用它們),所以你可能更好f從磁盤或資源中的文件加載圖標。如果你從磁盤加載它,你可以使用這種方法:

' 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

謝謝,你的圖片盒方法工作完美。 – MaQleod 2009-05-27 22:24:18

2

你想要一個picturebox控件將圖像放在窗體上。

然後,您可以將Image屬性設置爲您希望顯示的圖像,即來自磁盤上的文件,圖像列表或資源文件的圖像。

假設你有一個圖片稱爲PCT:

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

歡迎使用堆棧溢出。請詳細說明您的答案 – 2012-11-20 21:09:57

0

您可以使用一個Label控件做同樣的事情。我用一個在picturebox控件中的圖像上繪製一個點。這可能比使用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