TValueListEditor: Ajout automatique d'une ligne vide
Bonjour,
J'utilise un composant TValueListEditor pour gérer des catégories et j'aimerai faire trois choses:
1) Avoir toujours une ligne vide en bas de la liste (càd ajouter une ligne avec InsertRow dès que l'utilisateur entre une donnée dans une case vide)
2) Vérifier la validité des valeurs introduites par l'utiilsateur et les stocker lorsqu'il quitte une cellule grâce à OnValidate
3) Proposer des valeurs par défaut grâce à OnGetPickList
Mon problème est que lorsque l'utilisateur choisi une valeur dans la liste déroulante, l'événement OnValidate n'est pas appelé et mon programme ne peut pas récupérer la valeur à ce moment pour la stocker :-(
Ci-après le code que j'utilise.
On voit que:
J'entre une valeur à la main: OnValidate est correctement appelé
Je choisis une valeur dans la liste: OnValidate n'est pas appelé
Code:
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
| //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
addLine=true;
ValueListEditor1->InsertRow("Start","",true);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ValueListEditor1GetPickList(TObject *Sender,
const AnsiString KeyName, TStrings *Values)
{
Values->Clear();
Values->Append("Hello 1");
Values->Append("Hello 2");
Values->Append("Hello 3");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ValueListEditor1Validate(TObject *Sender, int ACol,
int ARow, const AnsiString KeyName, const AnsiString KeyValue)
{
MessageDlg(KeyName+"="+KeyValue+" is ok",mtInformation,
TMsgDlgButtons()<<mbOK,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ValueListEditor1StringsChange(TObject *Sender)
{
if (!addLine) return;
addLine=false;
ValueListEditor1->InsertRow("New","",true);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ValueListEditor1SelectCell(TObject *Sender,
int ACol, int ARow, bool &CanSelect)
{
AnsiString currentContent=ValueListEditor1->Cells[ACol][ARow];
if (currentContent.IsEmpty()) addLine=true;
else addLine=false;
}
//--------------------------------------------------------------------------- |
Merci de votre aide