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
- Le combo a pour style csDropDown (pourvu d'une liste d'édition pouvant être changée à la mano)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Ligne1 Ligne2 Ligne3 Ligne4 Ligne6
- 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 : 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
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.
Partager