Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 2016
-
31 janv. 2013 à 13:55
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 2016
-
1 févr. 2013 à 08:06
Bonjour à tous,
Je suis en train de développer un UserControl qui peut contenir plusieurs PictureBox, nombre qui sera défini via une propriété de cet UC.
Sur mon UC j'ai donc "dessiné" une PictureBox avec l'Index égal à 0. Quand ma propriété "Nombre" varie, je charge autant de PictureBox que nécessaire et l'index s'incrémente automatiquement. Jusque là pas de problème.
Le problème est que si j'examine le code de ma form dans mon projet d'essai (pas celui de mon .CTL), je ne vois que le 1er PictureBox (celui que j'ai dessiné) et pas les autres. Ce qui fait que les futures propriétés ne seront pas enregistrées et donc pas relues (j'espère être assez clair).
Ci_dessous, le code de mon .CTL avec la propriété HorizontalPanes qui sera le nombre de PictureBox (figé à 3 pour mon essai), et la propriété BackColor pour vérifier que cela marche.
Option Explicit
Private intHorizontalPanes As Integer
Private intIndex As Integer
Public Property Get BackColor(ByVal Index As Integer) As OLE_COLOR
BackColor = PANE(Index).BackColor
End Property
Public Property Let BackColor(ByVal Index As Integer, New_Value As OLE_COLOR)
intIndex = Index
PANE(Index).BackColor = New_Value: PropertyChanged "BackColor"
End Property
Public Property Get HorizontalPanes() As Integer
HorizontalPanes = intHorizontalPanes
End Property
Public Property Let HorizontalPanes(New_Value As Integer)
intHorizontalPanes = New_Value: PropertyChanged "HorizontalPanes"
End Property
Private Sub UserControl_Initialize()
HorizontalPanes = 3: Call LoadPanes
BackColor(0) = vbWhite
BackColor(1) = vbBlue
BackColor(2) = vbRed
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
HorizontalPanes = PropBag.ReadProperty("HorizontalPanes", 2)
BackColor(intIndex) = PropBag.ReadProperty("BackColor", vbWhite)
End Sub
Private Sub UserControl_Resize()
Dim intWidth As Integer, X As Integer, intLeft As Integer
intWidth = (UserControl.Width / HorizontalPanes)
For X = 0 To HorizontalPanes - 1
PANE(X).Left intLeft: PANE(X).Top 0
PANE(X).Width intWidth: PANE(X).Height Height
intLeft = PANE(X).Left + PANE(X).Width
Next
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("HorizontalPanes", HorizontalPanes, 2)
Call PropBag.WriteProperty("BackColor", BackColor(intIndex), vbWhite)
End Sub
Private Sub LoadPanes()
Dim X As Integer
On Error Resume Next
For X = 1 To HorizontalPanes - 1
Set PANE(X) = CreateObject("PictureBox")
Load PANE(X)
PANE(X).Visible = True
Next
End Sub
Merci d'avance pour votre aide
Calade
A voir également:
Plusieurs instances d'un contrôle dans un UserControl
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 31 janv. 2013 à 19:01
Bonjour,
Dans ce cas, il ne faut pas enregistrer les propriétés dans le controle ciblé, mais de manière personnalisée.
Une autre technique qui peut aussi fonctionner, forcer les valeur lors de l'init de la form conteneur.
v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list ---
Mon site