我在C ++ Builder XE4上工作VCL。
我有以下组件。
FormMain
FormSelect(或DialogSelect)
期望的行为
在上面的第3步,我想这样做:
通过使用对话框,我可以从Modal返回一个值 结果Constans。 http://docwiki.embarcadero.com/RADStudio/XE5/en/Modal_Result_Constants
但是当我想从20个或更多项中返回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;