[2.0.12] Faire fonctionner un ComboBox par code
Bonjour,
Une bête fiche avec (cbb c'est le ComboBox)
Code:
1 2 3 4
| procedure TForm1.FormCreate(Sender: TObject);
begin
cbb.Items.Add('essai');
end; |
Un bête bouton avec
Code:
1 2 3 4
| procedure TForm1.Button1Click(Sender: TObject);
begin
cbb.Text:=cbb.Items[0];
end; |
et un ComboBox à qui je change le style de csDropDown à csDropDownList puis à csSimple et dans les trois cas, je n'ai rien qui s'affiche en cliquant sur le bouton :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| procedure TForm1.cbbChange(Sender: TObject);
begin
showmessage('change');
end;
procedure TForm1.cbbClick(Sender: TObject);
begin
showmessage('click');
end;
procedure TForm1.cbbCloseUp(Sender: TObject);
begin
showmessage('closeup');
end;
procedure TForm1.cbbSelect(Sender: TObject);
begin
showmessage('select');
end; |
J'en ai essayé un autre, OnEditingDone, mais c'est pire.
J'ai fouillé le web et n'ai rien trouvé, sauf un post disant qu'avec OnSelect c'était bon mais il est sur MacOS et la discussion a 3 ans :cry:
Quelqu'un saurait comment me sortir de ce pétrin ?
Merci et bon app',
FPC 3.2 Laz 2.0.12 dans Linux Debian Bullseye 11.2
Update, refresh, repaint, invalidate
Bonjour,
Au lieu d'écrire cbb.Text:=cbb.Items[0]; qui ne génère pas d'événement (a priori Text sert à afficher quelque chose qui n'est pas dans la liste comme '- choisir -') il est préférable d'utiliser cbb.ItemIndex := 0; qui déclenchera les événements qui vont bien.
Si on veut forcer une actualisation immédiate il y a refresh et repaint. Si on veut dire au système qu'une actualisation est nécessaire il y a update et invalidate. Dans la plupart des cas, ces deux derniers placent un message qui déclenchera un repaint lors du prochain process.Messages (automatique ou manuel) mais il y a des composants pour lesquels ces quatre méthodes sont interchangeables (elles appellent immédiatement un repaint).
Salutations