custom control avec des images
Bonjour,
je cherche a faire un contrôle customisé à ajouter à ma toolbox.
Ce controle contient une image et un texte, c'est assez simple.
Pour le texte pas de problème, ca marche comme il faut, mais je n'arrive pas a afficher d'image.
Voilà comment j'ai procédé :
j'ai un projet de type "Class library" qui contient mon controle customisé.
Dans ce projet j'ai "MonControle.vb" qui est un userControl, et qui contient une picturebox.
J'ai également un fichier de ressources "images_res2" qui contient mes images.
Voila le code de mon controle :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
Imports System.Resources
Imports System.Reflection
Public Class Pions
Public Enum eType
image1
image2
image3
End Enum
Private _Type As eType
Private _Nombre As Integer
Public Property Type As eType
Get
Return _Type
End Get
Set(ByVal value As eType)
_Type = value
Dim resmgr As New ResourceManager("MyControlNamespace.images_res2", Assembly.GetExecutingAssembly())
Select Case value
Case eType.image1
Me.pImage.Image = resmgr.GetObject("image1")
Case eType.image2
Me.pImage.Image = resmgr.GetObject("image2")
Case eType.image3
Me.pImage.Image = resmgr.GetObject("image3")
Case Else
End Select
End Set
End Property
Public Property Nombre As Integer
Get
Return _Nombre
End Get
Set(ByVal value As Integer)
_Nombre = value
tNombre.Text = value
End Set
End Property
End Class |
Quand j'essaye d'utiliser ce controle dans un projet winform (je le compile, puis j'ajoute la dll dans ma toolbox), le texte fonctionne bien mais aucune image ne s'affiche quand je change la propriété "Type", sauriez vous me dépanner?
Merci beaucoup.
usercontrol avec resources images incorporees
Bonjour Flamby38,
est-ce que ce n'est pas du à la maniere de creer le fichier resources en vb.net.
il faut faire dans le projet usercontrol (dll):
1/ ajouter nouvel element->general >fichier resources
-le renommer ensuite en images_res2
2/ proprietes projets->resources >ajouter un fichier
-on ajoute image1.jpg,image2.jpg,image3.jpg
3/dans explorateur de solutions
proprietes fichier images_res2
Action de Generer=Ressource incorporée
Generer.
4/creer un projet test et referencer ton user conntrol
5/generer
il doit apparaitre dans toolbox,tu le depose et ca doi marcher.
en tout cas j'ai rajouter quelques lignes pour ameliorer l'aspect et l'utilisation du usercontrol
ci-apres le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
'Projet UserControl
'Ajoute un TableLayoutPanel a ton UserControl avec 2 lignes
'postionne :
'-le TextBox sur la 1ere ligne
'-le PictureBox sur la 2eme ligne
'mets:
'-TableLayoutPanel.dock=fill
''ajuste :
'-les hauteurs des 2 lignes suivant l'aspect desire
'-ensuite dans TableLayoutPanel mets lignes à redimensionner auto.
'Tout cela pour garder un aspect homogene au controle
Imports System.Resources
Imports System.Reflection
Imports System.Attribute
Imports System.ComponentModel
Public Class Pions
Public Enum eType
image1
image2
image3
End Enum
Private _Type As eType
Private _Nombre As Integer
Public Sub New()
' Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
'initialise ton image pour l'utilisateur
Me._Type = eType.image1
Me._Nombre = 1
'Met BorderStyle à Fixed3D sinon on ne voit pas les limites de ton controle
Me.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
End Sub
'rend proprietes visible dans inspecteur proprietes
'petite description apparait dans le bas de l'inspecteur
<Browsable(True), Description("Choix Images")> _
Public Property Type() As eType
Get
Return _Type
End Get
Set(ByVal value As eType)
_Type = value
Dim resmgr As ResourceManager = New ResourceManager("MyControlNamespace.images_res2", Assembly.GetExecutingAssembly())
'Dim tt As String = resmgr.GetString("image1")
Select Case value
Case eType.image1
Me.pImage.Image = resmgr.GetObject("image1")
Case eType.image2
Me.pImage.Image = CType(resmgr.GetObject("image2"), Image)
Case eType.image3
Me.pImage.Image = CType(resmgr.GetObject("image3"), Image)
Case Else
End Select
'rajoute ceci pour que l'image s'adapte a la taille du controle
'lors du redimensionement par utilisateur.
Me.pImage.SizeMode = PictureBoxSizeMode.StretchImage
End Set
End Property
<Browsable(True), Description("Nbre Images")> _
Public Property Nombre() As Integer
Get
Return _Nombre
End Get
Set(ByVal value As Integer)
_Nombre = value
tNombre.Text = value
End Set
End Property
End Class |
En tous cas le fichier images_res2.resx peut etre inspecter voici ce que j'ai chez a la fin apres avoir ajoute les images :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="image1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\image1.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\image2.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\image3.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root> |
bon code et bonne soiree ...