如何将值从Dialog(Form)中的20个项传递给调用者(Form)

sev*_*ine 2 delphi c++builder

我在C++ Builder XE4上工作VCL.

我有以下组件.

FormMain有

  • TButton*B_select;

FormSelect(或DialogSelect)有

  • TComboBox*CB_list;
  • TButton*B_ok;
  • TButton*B_cancel;

期望的行为

  1. @FormMain,单击B_select打开FormSelect
  2. @FormSelect,在CB_list中选择列表
  3. @FormSelect,单击B_ok将listindex传递给FormMain

在上面的第3步,我想做:

  • 关闭FormSelect
  • 将listindex传递给调用者(FormMain)

通过使用对话框,我可以从Modal Result Constans返回一个值. http://docwiki.embarcadero.com/RADStudio/XE5/en/Modal_Result_Constants

但是,当我想从20个或更多项中返回1个值时,如何使用Form/Dialog传递该值?

Ken*_*ite 5

设置B_ok.ModalResultmrOk.(Delphi代码给出,因为你在标签中包含了Delphi.)

用于if FormSelect.ShowModal = mrOk查看是否Ok单击了按钮.阅读FormSelect.CB_list.ItemIndex以找出选择的值.

或者,更好的是,给出TFormSelect一个包含的公共财产ItemSelected.将其设置CB_list.ItemIndexB_ok.OnClick事件:

type
  TFormSelect = class(TForm)
   // other declarations
    procedure B_okClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    FItemSelected: Integer;
  public
    property ItemSelected: Integer read FItemSelected;
  end;

implementation

procedure TFormSelect.B_okClick(Sender: TObject);
begin
  FItemSelected := CB_list.ItemIndex;
end;

procedure TFormSelect.FormCreate(Sender: TObject);
begin
  FItemSelected := -1;
end;
Run Code Online (Sandbox Code Playgroud)

在调用代码中:

SelectForm := TFormSelect.Create(nil);
try
  if SelectForm.ShowModal = mrOk then
    SelectedItem := SelectForm.ItemSelected;
finally
  SelectForm.Free;
end;
Run Code Online (Sandbox Code Playgroud)