Отображать значок на форме в vb.net

Как отобразить значок с разрешением 48x48 в форме в vb.net? Я посмотрел на использование imagelist , но я не знаю, как отобразить изображение, которое я добавляю в список, используя код, и как указать его координаты в форме. Я провел поиск в Google, но ни один из примеров не показывает то, что мне нужно знать.


person MaQleod    schedule 27.05.2009    source источник


Ответы (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
person Fredrik Mörk    schedule 27.05.2009

Вы хотите, чтобы элемент управления 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
person Pondidum    schedule 27.05.2009

Вы можете использовать элемент управления меткой, чтобы сделать то же самое. Я использовал один, чтобы нарисовать точку над изображением в элементе управления 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
person Ron Carter    schedule 27.09.2012

person    schedule
comment
Добро пожаловать в Stack Overflow. Пожалуйста, уточните свой ответ - person Tony Rad; 21.11.2012
comment
Это действительно бесполезно. Одна строка без объяснений, и код выдает синтаксические ошибки в Visual Basic. Мы должны читать ваши мысли, чтобы использовать этот ответ? (-1) - person thebunnyrules; 30.07.2017
comment
Это работает отлично. Я только что изменил ...Images(0) на My.Resources.mypngfile, и это сработало как шарм. - person ; 25.01.2021