IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6][UserControl et OCX]Problème de conception


Sujet :

VB 6 et antérieur

  1. #1
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut [VB6][UserControl et OCX]Problème de conception
    Bonjour

    J'ai réalisé un OCX qui permet la création d'un recordset hiérarchique (deux tables liées) et la navigation dans les enregistrements. En fait, c'est la barre d'outils et l'ensemble des fonctions qu'elle propose que j'expose dans mes praticiels (voir par exemple "Gestion des données ADO"). L'OCX est fournisseur de données.

    Dans le code de l'OCX, je fais référence à un groupe de TextBoxes dont le nom est spécifié en dur (txtPere(index)), ainsi qu'à une DataGrid (nom également défini en dur). Ceci oblige le concepteur utilisant cet OCX de positionner le groupe de TextBoxes et grille dans la feuille parent en les nommant selon le nom utilisé dans le composant.

    Comment définir n'importe quel nom pour ces éléments dans la feuille parent de l'OCX et faire la liaison avec les noms utilisé dans l'OCX?

    Merci.

  2. #2
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Ces composants ne peuvent pas etre inclus dans l'ocx ?

    Sinon déclare les comme propriétés de l'ocx
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  3. #3
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Non, car il faut que le concepteur soit libre de dessiner sa feuille et d'y créer les contrôles qu'il souhaite.

    J'avais fait par ailleurs (il y a pas mal de temps) un truc qui permettait de créer des TextBoxes en fonction des champs d'une table, mais c'est inaproprié ici.

    Pour l'instant, je m'en sort par une pirouette en obligeant le concepteur a créer les champs selon leur nom dans l'OCX, comme ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub UserControl_Paint()
     
      Dim i As Integer
     
      UserControl.Extender.Move 0, 0
     
      If UserControl.Parent.Controls.Count > 1 Then
        intNbreTextBox = UserControl.Parent.txtPere.Count
        UserControl.Parent.txtPere(0).SetFocus
        For i = 0 To intNbreTextBox - 1
          UserControl.Parent.txtPere(i).Locked = True
          UserControl.Parent.txtPere(i).BackColor = &HFFFF80
        Next i
        UserControl.Parent.DataGrid1.AllowUpdate = False
        UserControl.Parent.DataGrid1.BackColor = &HFFFF80
        updateButtons ("Navigation")
      Else
        MsgBox "Créez un groupe de contrôles nommés txtPere(index)" & VbCrlf & _
               "et une DataGrid nommée DataGrid1."
     
      End If
     
    End Sub

  4. #4
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Tu as raté la 2e partie de mon message

    Crée 2 propriétés à ton ocx :
    DBgridName
    txtFatherName
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  5. #5
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par Thierry AIM
    Tu as raté la 2e partie de mon message

    Citation Envoyé par Thierry AIM
    Crée 2 propriétés à ton ocx :
    DBgridNametxtFatherName
    Et qu'est-ce que j'en fais :

  6. #6
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Ben tu remplaces les valeurs en dur dans ton ocx par ces propriétés, et lors que l'utilisateur crée l'ocx en mode développement, il renseigne ces propriétés avec les noms des controles qu'il à créé
    A toi de gérer l'erreur dans ton ocx, au cas où ...
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  7. #7
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    'Variables de propriétés:
    Dim m_DataGrid As Control
    Public Property Get DataGrid() As Object
        Set DataGrid = m_DataGrid
    End Property
     
    Public Property Set DataGrid(ByVal New_DataGrid As Control)
        Set m_DataGrid = New_DataGrid
        PropertyChanged "DataGrid"
    End Property
     
    'Charger les valeurs des propriétés à partir du stockage
    Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
        Set m_DataGrid = PropBag.ReadProperty("DataGrid", Nothing)
    End Sub
     
    'Écrire les valeurs des propriétés dans le stockage
    Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
        Call PropBag.WriteProperty("DataGrid", m_DataGrid, Nothing)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Load()
        Set UserControl11.DataGrid = DataGrid1
        MsgBox UserControl11.DataGrid.Name
    End Sub
    et dans le code de ton ocx, tu utilises la propriété DataGrid au lieu du nom codé en dur

    Suis-je assez clair ?
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  8. #8
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    C'est clair... mais cela ne fonctionne pas

    Lors de la définition des propriétés de l'OCX, dans le code de la page de propriétés, la procédure "Sub PropertyPage_SelectionChanged" se lance.

    La ligne "txtGrille.Text = SelectedControls(0).Grille" renvoie alors à alors "Private Property Get Grille () as Object" du code de l'OCX. La propriété renvoie "Nul", et cela lève l'erreur 91 "Variable objet ou ... non définie dans PropertyPage_SelectionChange".

    La page de propriétés ne s'affiche même plus...

    J'ai vérifié que tout était bien déclaré, j'ai essayé en modifiant "as Object" en "as Control", ou un tas d'autres choses qui ne me renvoient que des erreurs.

    J'ai sûrement loupé quelque chose, mais là, je suis paumé.

  9. #9
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    on error resume next
    ou goto endproperty
    ou ce que tu veux, pourvu que ca plante pas
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 11h04
  2. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  3. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  4. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13
  5. [VB6] [UserControl] Évènements personnalisés
    Par Frankywinky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2003, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo