2009-05-27 6 views
3

Comment afficher une icône à une résolution 48x48 sur un formulaire dans vb.net? J'ai regardé en utilisant l'imagelist, mais je ne sais pas comment afficher l'image que j'ajoute à la liste en utilisant du code et comment spécifier ses coordonnées sur le formulaire. J'ai fait des recherches sur google mais aucun des exemples ne montre vraiment ce que j'ai besoin de savoir.Afficher l'icône sur le formulaire dans vb.net

Répondre

7

Le ImageList n'est pas idéal lorsque vous avez des formats d'image supportant la transparence alpha (à au moins, c'était le cas, je ne les ai pas beaucoup utilisé récemment), donc vous êtes probablement mieux f chargement de l'icône à partir d'un fichier sur le disque ou d'une ressource. Si vous chargez à partir du disque, vous pouvez utiliser cette approche:

' 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() 

Mise à jour: si vous voulez au lieu d'avoir l'icône comme une ressource intégrée dans votre assemblée, vous pouvez modifier la méthode LoadIconFromFile afin qu'il ressemble à ce lieu :

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

Merci, votre méthode picturebox a parfaitement fonctionné. – MaQleod

2

Vous souhaitez un contrôle de zone de stockage pour placer l'image sur le formulaire.

Vous pouvez ensuite définir la propriété Image sur l'image que vous souhaitez afficher, que ce soit à partir d'un fichier sur le disque, d'une liste d'images ou d'un fichier de ressources.

En supposant que vous avez un picturebox appelé pct:

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

ou

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

ou

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

Bienvenue dans Stack Overflow. S'il vous plaît élaborer votre réponse –

+0

Votre poste fonctionne très bien pour moi! Thx – RicardoBalda

+0

Ceci est vraiment inutile. Une ligne sans rien expliqué et le code donne des erreurs de syntaxe dans Visual Basic. Sommes-nous censés lire dans votre esprit pour utiliser cette réponse? (-1) – thebunnyrules

0

Vous pouvez utiliser un contrôle d'étiquette pour faire la même chose. J'en ai utilisé un pour dessiner un point sur une image dans un contrôle de la boîte à images. Il pourrait être moins lourd que d'utiliser un 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) 

L'utilisation de la méthode OnPaint pourrait être le meilleur moyen de le faire.

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 
Questions connexes