Problèmes sur composant TComboBox
Bonjour à tous,
J'ai un petit souci d'utilisation du composant TComboBox
Hypothèses (sens mathématique)
- Un combo avec les éléments suivants entrés par la composition du composant
Code:
1 2 3 4 5
| Ligne1
Ligne2
Ligne3
Ligne4
Ligne6 |
- Le combo a pour style csDropDown (pourvu d'une liste d'édition pouvant être changée à la mano)
- Un Label
- Un bouton
- Quand je change le combo pour la première fois un item est ajouté et l'itemindex prend la l'indexation de ce composant
Problèmes :
- Quand je me mets dans la zone d'édition du combo, et que j'appuie sur 'A', ça m'imprime 'Changé première fois 4 >1<', jusque là, tout va bien... sauf que quand j'appuie sur le bouton, l'itemindex est à -1 (affichage de -1)
- Quand je me mets dans la zone d'édition du combo et que j'appuie sur 'Suppr', ça m'imprime 'Changé deuxième fois -1>2<', le texte de la combo passe à vide, et l'appui sur le bouton est en adéquation avec l'itemindex puisqu'il affiche -1.
Questions :
- Pourquoi la touche suppr engendre 2 OnChange alors qu'un appui simple n'induit qu'un seul évènement ?
- Pourquoi l'itemindex au sortir de la fonction OnChange est-il perdu ?
Zarbi non ?
Merci pour vos réponses.
Thierry.
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 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
| Unit main;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
Type
TfrmMain = Class(TForm)
ComboBox1: TComboBox;
Label1: TLabel;
Button1: TButton;
Procedure ComboBox1Change(Sender: TObject);
Procedure Button1Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
Procedure ComboBox1KeyUp(Sender: TObject; Var Key: Word; Shift: TShiftState);
Private
{ Déclarations privées }
fRebonds: Integer;
Public
{ Déclarations publiques }
End;
Var
frmMain: TfrmMain;
Implementation
{$R *.dfm}
Procedure TfrmMain.ComboBox1Change(Sender: TObject);
Begin
Self.fRebonds:=Self.fRebonds+1;
If ComboBox1.Items.Count=5 Then
Begin
ComboBox1.Items.Add('Ligne5');
ComboBox1.Sorted:=True;
ComboBox1.ItemIndex:=4;
Label1.Caption:='Changé première fois '+IntToStr(ComboBox1.ItemIndex)+'>'+IntToStr(Self.fRebonds)+'<';
End
Else
Label1.Caption:='Changé deuxième fois '+IntToStr(ComboBox1.ItemIndex)+'>'+IntToStr(Self.fRebonds)+'<';
End;
Procedure TfrmMain.Button1Click(Sender: TObject);
Begin
Label1.Caption:=IntToStr(ComboBox1.ItemIndex);
ComboBox1.Items.Add('toto')
End;
Procedure TfrmMain.FormCreate(Sender: TObject);
Begin
Self.fRebonds:=0;
End;
Procedure TfrmMain.ComboBox1KeyUp(Sender: TObject; Var Key: Word; Shift: TShiftState);
Begin
Self.fRebonds:=0;
End;
End. |