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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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.