Как отобразить значок с разрешением 48x48 в форме в vb.net? Я посмотрел на использование imagelist , но я не знаю, как отобразить изображение, которое я добавляю в список, используя код, и как указать его координаты в форме. Я провел поиск в Google, но ни один из примеров не показывает то, что мне нужно знать.
Отображать значок на форме в vb.net
Ответы (4)
ImageList не идеален, когда у вас есть форматы изображений, поддерживающие альфа-прозрачность (по крайней мере, так было раньше; в последнее время я не использовал их часто), поэтому вам, вероятно, лучше загрузить значок из файла на диске или из ресурса. Если вы загружаете его с диска, вы можете использовать этот подход:
' 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
Вы хотите, чтобы элемент управления picturebox поместил изображение в форму.
Затем вы можете установить свойство Image для изображения, которое вы хотите отобразить, будь то из файла на диске, списка изображений или файла ресурсов.
Предполагая, что у вас есть изображение с именем pct:
pct.Image = Image.FromFile("c:\Image_Name.jpg") 'file on disk
or
pct.Image = My.Resources.Image_Name 'project resources
or
pct.Image = imagelist.image(0) 'imagelist
Вы можете использовать элемент управления меткой, чтобы сделать то же самое. Я использовал один, чтобы нарисовать точку над изображением в элементе управления 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