2017-04-18 2 views
1

J'ai un TComboBox dans mon formulaire Delphi 7 avec quelques éléments dedans. Dans l'événement OnChange, je fais un traitement en fonction de l'élément sélectionné, mais au cours de ce traitement, je souhaite revenir à l'élément sélectionné précédent.Comment faire pour obtenir ComboBox ItemIndex avant l'événement OnChange?

Programmatically, je veux quelque chose comme

ComboBox.ItemIndex := oldItemIndex; 

Le problème est que je ne sais pas comment obtenir le oldItemIndex.

J'ai essayé de définir une variable (globale) dans l'événement OnCloseUp, mais ItemIndex il y a déjà le nouvel ItemIndex sélectionné. J'ai également essayé d'enregistrer oldItemIndex sur OnEnter événement. Bien que cela fonctionne pour enregistrer le oldItemIndex la première fois que le contrôle est mis au point, cela ne fonctionne pas si le focus est conservé, ce qui ne fonctionne effectivement que la première fois que l'élément change.

Quelle est la manière la plus simple d'obtenir le dernier élément sélectionné dans une zone de liste déroulante à l'intérieur du gestionnaire d'événement OnChange?

Répondre

4

une façon de le faire est comme ceci:

type 
    TForm1 = class(TForm) 
    ComboBox1: TComboBox; 
    Edit1: TEdit; 
    procedure ComboBox1Change(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    private 
    FPriorIndex : integer; 
    public 
    end; 

implementation 

{$R *.dfm} 

procedure TForm1.ComboBox1Change(Sender: TObject); 
begin 
    showmessage(ComboBox1.Items[FPriorIndex]); 
    FPriorIndex := ComboBox1.ItemIndex; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    ComboBox1.ItemIndex := 0; 
    FPriorIndex := ComboBox1.ItemIndex; 
end; 

Comment faire sans variable en dehors de l'événement OnChange:

procedure TForm1.ComboBox1Change(Sender: TObject); 
const 
    PRIOR_INDEX : integer = 0; 
begin 
    showmessage(ComboBox1.Items[PRIOR_INDEX]); 
    PRIOR_INDEX := ComboBox1.ItemIndex; 
end; 

Pour que cela fonctionne, vous devez ouvrir votre options du projet/compilateur et cocher "Constantes typées assignables"

+0

J'ai fait quelque chose comme ça, mais je me demandais s'il y a un moyen qui n'implique pas s en utilisant une variable en dehors de la portée de 'OnChange'. – ricardomenzer

+0

@ricardomenzer J'ai édité ma réponse pour inclure une façon de le faire sans une variable en dehors de l'événement onchange – GuidoG

+0

C'était ce dont je parlais. Vraiment une bonne solution. Réponse acceptée. Merci. – ricardomenzer