如何在OnChange事件之前获取ComboBox ItemIndex?

ric*_*zer 1 delphi combobox delphi-7

我的Delphi 7表格中有一个TComboBox,里面有一些项目.在这种情况OnChange下,我会根据选择的项目进行一些处理,但在此处理过程中,我可能希望恢复到之前选择的项目.

以编程方式,我想要类似的东西

ComboBox.ItemIndex := oldItemIndex;
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何得到oldItemIndex.

我尝试在OnCloseUp事件中定义一个(全局)变量,但是ItemIndex已经有了新选择的ItemIndex.我也试过节能oldItemIndexOnEnter的事件.虽然这可以oldItemIndex在第一次控制聚焦时保存,但如果焦点保留在其中则不起作用,因此只有在项目第一次更改时才有效.

在OnChange事件处理程序内部获取ComboBox中最后一个选定项目的最简单方法是什么?

Gui*_*doG 6

一种方法是这样的:

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;
Run Code Online (Sandbox Code Playgroud)

如何在没有OnChange事件之外的变量的情况下执行此操作:

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

为此,您需要打开项目选项/编译器并选中"可分配的类型常量"