J'ai cherché pendant deux heures hier soir en vain pour trouver l'origine de ce bug très personnel, donc je me permet de mettre le code ici :
Voici ce qui se passe :

J'ai un StringGrid qui affiche les données contenues dans un fichier texte comme ceci:


Quand je clique sur un bouton via un menu, je souhaite pouvoir ouvrir une nouvelle fiche vide comme ceci:



J'ai simplement fait ceci via ce code:

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
void __fastcall TForm1::Nouveaufichier1Click(TObject *Sender)
{
                 AdvStringGrid1->FixedRows=1;
                 AdvStringGrid1->RowCount=2;
                 for (int vide2=0;vide2<AdvStringGrid1->ColCount;vide2++)
                 {
                 for(int vide=1;vide<AdvStringGrid1->RowCount;vide++)
                 {
                  AdvStringGrid1->Cells[vide2][vide]="";
                 }
                 }
                 		TReplaceFlags Flags = Flags << rfReplaceAll;
 
		AnsiString T1 = "Qualité\n";
		AnsiString T2 = "Prénom\n";
		AnsiString T3 = "Nom\n";
                AnsiString T4 = "Poste\n";
                AnsiString T5 = "Email\n";
                AnsiString T6 = "Prononciation\n";
 
 
		AnsiString N =  T1 + T2 + T3 + T4 + T5 + T6;
                AdvStringGrid1->Rows[0]->Text = N;
}
le problème c'est que quand je clique 4 fois sur le bouton pour ajouter une ligne il me met ceci:



Il me met donc 2 lignes de la fiche précédente...

voici le code que j'utilise pour créer une nouvelle ligne:

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
void __fastcall jStringGrid::AddRow(int Index)
{
 
/*Déplace une ligne à une nouvelle position.
 
void __fastcall MoveRow(int FromIndex, int ToIndex); */
/*Appelez la méthode MoveRow pour déplacer la ligne d'indice FromIndex à la position spécifiée par le paramètre ToIndex.*/
RowCount++;
MoveRow(RowCount-1, Index);
}
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
( (jStringGrid*)AdvStringGrid1 )->AddRow(AdvStringGrid1->RowCount); // ajout de la nouvelle ligne à la "dernière ligne"
 
}
Sachant que dans le .h il y a donc la classe dérivée de StringGrid:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
class jStringGrid : public TStringGrid
{
private :
    __fastcall jStringGrid(TWinControl *AOwner);
public :
 
    __fastcall ~jStringGrid();
    void __fastcall AddRow(int Index);
};
Solution d'henderson sur un vieux sujet