Plusieurs instances d'un contrôle dans un UserControl [Résolu]

Signaler
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
-
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
-
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

2 réponses

Messages postés
14740
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
30 novembre 2020
148
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
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
Bonjour et merci de ta réponse,

C'est bien ce que je craignais. Je vais regarder de plus près les fichiers INI ou autres fichiers de données.


Calade