Bonjour à tous,

Habituellement, je trouve la plus part des réponses à mes questions dans la FAQ C++ Builder, mais là, malgré des recherches, je n’ai pas trouvé.

Je vous expose mon problème :

Création dans l’EDI :
Dans une Form1, je dépose un TTabbedNotebook et un TListBox. Dans le TabbedNotebook, j’ inséré un TRichEdit dans l’onglet par défaut.

Création dynamique :
Au cours de l’application, lorsque l’on double-clique sur un item de la ListBox, je souhaite ajouter dynamiquement un onglet au TabbedNotebook et y insérer un TRichEdit dont je conserve l’adresse dans un TList onglet.

J’utilise le code suivant :

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
 
void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
{
    // Création du nouvel onglet
    int i = ListBox1->ItemIndex;
    AnsiString titre = ListBox1->Items->Strings[i];
    TabbedNotebook1->Pages->Add(titre);
 
    // Création du RichEdit
    TRichEdit *richEdit = new TRichEdit(TabbedNotebook1);
    richEdit->Parent = TabbedNotebook1;
    richEdit->Align = alClient;
    richEdit->Enabled = true;
    richEdit->Visible = true;
    richEdit->Show();
 
    // L'ajouter dans le TList
    onglet->Add(richEdit);
}
Ce qui se passe :

Au démarrage de l’application, j’ai bien le RichEdit dans l’onglet par défaut

Lorsque je double clique sur un item de la ListBox, j’ouvre bien un nouvel onglet contenant le nouveau RichEdit qui s’affiche

Lorsque je sélectionne le premier onglet créé dans l’EDI, je vois le RichEdit correspondant.

Mais ô damned, lorsque je sélectionne à nouveau l’onglet créer dynamiquement, le nouveau RichEdit à disparu.


Peut-être un problème de Parent ou de Owner, mais je ne vois pas comme leurs attribuer l’onglet sélectionné du TabbedNotebook alors que cela se fait automatiquement lors de la création dans l’EDI.

Merci pour votre aide.