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

时间:2014-03-27 01:25:38

标签: 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
  4. 在上面的第3步,我想这样做:

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

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

    但是当我想从20个或更多项中返回1个值时, 如何使用表单/对话框传递值?

1 个答案:

答案 0 :(得分:5)

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

使用if FormSelect.ShowModal = mrOk查看是否点击了Ok按钮。阅读FormSelect.CB_list.ItemIndex以找出所选的值。

或者,更好的是,为TFormSelect提供包含ItemSelected的公共属性。将其设置为CB_list.ItemIndex事件中的B_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;

在主叫代码中:

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