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

C++Builder Discussion :

Problème de changement de propriétés sur un composant créé dynamiquement !


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Problème de changement de propriétés sur un composant créé dynamiquement !
    Bonjour à tous,

    je vous expose mon problème : dans mon application, j'ai une fiche avec une Form qui appelle une autre unité qui créer des composants dynamiquement. Jusque là tout va bien car mais composants s'affiche bien sur ma Form. Mais lorsque je clique sur un des boutons créé je veux changer sa propriété Visible et là cela me procure une erreur !!!

    Comment ca se fait que je ne puisse plus intervenir sur les propriétés de mes composants créés dynamiquement ?

    Merci d'avance pour votre aide, à bientôt !

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Il n'y a aucun soucis à manipuler des composant créés dynamiquement (Et heureusement!)
    Tu dois probablement utiliser une référence incorrect ou invalide à l'objet, ce qui provoque une exception.

    Poste le bout de code qui pose problème si tu souhaite de l'aide.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    dans mon unité qui créer mes composants UComposants.cpp :
    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
    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
    82
     
    void Composants::Composants01 ()
    {
     
     
     
    	Button_1 = new TButton (FormEtalonnage);
    	Button_2 = new TButton (FormEtalonnage);
    	Button_3 = new TButton (FormEtalonnage);
    	Label_1 = new TLabel (FormEtalonnage);
    	Label_2 = new TLabel (FormEtalonnage);
    	Label_3 = new TLabel (FormEtalonnage);
     
    	FormEtalonnage->GroupBoxParam1->Caption = "pH :";
    	FormEtalonnage->GroupBoxParam1->Font->Style = TFontStyles() << fsBold;
    	FormEtalonnage->GroupBoxParam2->Caption = "Conductivité :";
    	FormEtalonnage->GroupBoxParam2->Font->Style = TFontStyles() << fsBold;
     
    	Button_1->Parent = FormEtalonnage->GroupBoxParam1;
    	Button_1->Caption = "pH 4";
    	Button_1->Font->Style = TFontStyles() << fsBold;
        Button_1->Font->Size = 10;
    	Button_1->Top = 33;
    	Button_1->Height = 25;
    	Button_1->Left = 16;
    	Button_1->Width = 97;
     
     
    	Button_2->Parent = FormEtalonnage->GroupBoxParam1;
    	Button_2->Caption = "pH 10";
    	Button_2->Font->Style = TFontStyles() << fsBold;
    	Button_2->Font->Size = 10;
    	Button_2->Top = 80;
    	Button_2->Height = 25;
    	Button_2->Left = 16;
    	Button_2->Width = 97;
     
    	Button_3->Parent = FormEtalonnage->GroupBoxParam2;
    	Button_3->Caption = "12,88 mS/cm";
    	Button_3->Font->Style = TFontStyles() << fsBold;
    	Button_3->Font->Size = 10;
    	Button_3->Top = 48;
    	Button_3->Height = 25;
    	Button_3->Left = 16;
    	Button_3->Width = 97;
     
    	Label_1->Parent = FormEtalonnage->GroupBoxParam1;
    	Label_1->Caption = "Etalonnage pH 4 en cours ...";
    	Label_1->Font->Color = clRed;
    	Label_1->Font->Size = 10;
    	Label_1->Top = 38;
    	Label_1->Left = 128;
    	Label_1->AutoSize = true;
    	Label_1->Visible = false;
     
    	Label_2->Parent = FormEtalonnage->GroupBoxParam1;
    	Label_2->Caption = "Etalonnage pH 10 en cours ...";
    	Label_2->Font->Color = clRed;
    	Label_2->Font->Size = 10;
    	Label_2->Top = 86;
    	Label_2->Left = 128;
    	Label_2->AutoSize = true;
    	Label_2->Visible = false;
     
    	Label_3->Parent = FormEtalonnage->GroupBoxParam2;
    	Label_3->Caption = "Etalonnage 12,88 mS/cm en cours ...";
    	Label_3->Font->Color = clRed;
    	Label_3->Font->Size = 10;
    	Label_3->Top = 52;
    	Label_3->Left = 128;
        Label_3->AutoSize = true;
    	Label_3->Visible = false;
     
    	ListeComposants->Add(Button_1);
    	ListeComposants->Add(Button_2);
    	ListeComposants->Add(Button_3);
    	ListeComposants->Add(Label_1);
    	ListeComposants->Add(Label_2);
    	ListeComposants->Add(Label_3);
     
     
    }
    dans mon autre Form si appui sur le Button_1 :
    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
     
    void __fastcall TFormEtalonnage::Envoi(TObject *Sender)
    {
     
     
    	Composants X;
     
    	AnsiString Info =  "Confirmer " + FormEtalonnage->ComboBoxNumSerie->Items->Strings[FormEtalonnage->ComboBoxNumSerie->ItemIndex] + " ?";
     
    	int Click = MessageBox(NULL, Info.c_str() , "Attention !", MB_ICONWARNING+MB_YESNO);
    	if ((Click == IDYES))
    	{
     
     
     
    		X.Label_1->Visible = true;
    		X.Button_1->Enabled = false;
     
             }
    }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Composants X;

    Dans ton code a l'air d'une variable locale, si c'est le cas, elle est vide, recréée à chaque appel de la fonction, et l'appel à X.Label1 finit forcément mal (il n'y a pas le Label1 au bout). Je pense que tu dois avoir une variable globale (ou d'instance) de type Composants, c'est celle là qu'il faut passer dans ta fonction.

    Francois

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci fcharton mais je n'ai pas compris !

    Pourrais tu m'expliquer s'il te plait ?

  6. #6
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Dans ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	Composants X;
     //[...]
    		X.Label_1->Visible = true;
    		X.Button_1->Enabled = false;
    X est une variable locale, et il n'est a aucun moment attribué a quelque chose. Donc lorsque tu tente d'accéder aux propriétés Label_1 ou Button_1, tu as une exception...

    Comme l'explique fcharton, tu dois récupérer l'objet de type Composants que tu as instancié au départ.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Je pense qu'il y a peut-être un problème de conception à la base !
    Est-ce qu'on n'y gagnerait pas en dérivant de TGroupBox ?

    A plus !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour et merci à tous pour votre aide !

    Effectivement mon problème venait de ma variable qui était déclarée en locale ...

    Merci encore et à bientôt !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème du retour à la ligne sur création de code dynamique
    Par zogug31 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/10/2013, 07h23
  2. Réponses: 4
    Dernier message: 22/01/2010, 17h36
  3. Problème de changement de police sur une ComboBox
    Par salem.ze.cat dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/09/2008, 10h34
  4. problème sur le composant aspSmartUpload
    Par PrinceMaster77 dans le forum ASP
    Réponses: 8
    Dernier message: 23/09/2004, 10h17

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