比如我在MainForm中的一个按钮消息响应中写如下代码:(功能是打开编辑Item的对话框TFrm_EditItem,TFrm_EditItem打开后需要初始化它的Edit控件,那么MainForm如何传参数给它?
var
  frmEditItem : TFrm_EditItem;
begin
  frmEditItem := TFrm_EditItem.Create(Application);
  frmEditItem.ShowModal();
  if frmEditItem.Button1被点击 then //如何在这里判断Button1被点击?
  begin
    do something;
  end;  frmEditItem.Destroy();//这里要不要destroy?
end;谢谢~~

解决方案 »

  1.   

    1、
    frmEditItem := TFrm_EditItem.Create(Application);
    frmEditItem.Edit1.Text:='你的初始字符串';2、将Button1的ModalResult设置为mrOk
    if frmEditItemModalResult=mrOK then
      begin
        do something;
      end;
    3、用frmEditItem.Free;
      

  2.   

    if frmEditItem.ShowModal = mrOk(or mrCancel...) then
    beign
      do Something;
    end;
    frmEditItem.Free;//用free,系统自动调用destroy
    在frmEditItem中的Button1最后加上ModalResult = mrOk...
      

  3.   

    多谢pilicat(delphi迷) to delphi72() :
    在frmEditItem中的Button1最后加上ModalResult = mrOk...
    ---------
    这句话什么意思?
      

  4.   

    在frmEditItem中的Button1最后加上ModalResult = mrOk...
    ---------
    这句话什么意思?在TFrmEditItem中的Button1(OK按钮)Click事件中写ModalResult := mrOK;
      

  5.   

    看看我的方法吧.
    Procedure TMainForm.Button1Click;
    Begin
      Application.CreateForm(TFrm_EditItem, Frm_EditItem);
      Frm_EditItem.Param1:= '';  //关键在于在 TFrm_EditItem 的Public 里定义Param1变量.
      Frm_EditItem.Param2:= '';
      IF TFrm_EditItem.ShowModal = mrOK Then begin
        //处理修改结果.
      End;
      TFrm_EditItem.Free;
    end;Type
      TFrm_EditItem = class(Form)
      Private
      Public
        Param1: String;
        Param2: String;
      end;在 TFrm_EditItem 的关闭按钮处写代码  ModalResult := mrCancel
    在 TFrm_EditItem 的确定(修改)按钮处写 ModalResult := mrOk;
      

  6.   

    將事件寫在showmodal之前
    但不能有設置焦點之類的事件
      

  7.   

    谢谢大家那如果我想在用户点击OK之后判断用户的输入是否为空,如果为空的话来个messagebox提示,然后置edit控件焦点让用户重新输入,如果不为空才close该对话框,那怎么办?这样好像不行:
      IF TFrm_EditItem.ShowModal = mrOK Then begin
        //处理修改结果.
      End;
      

  8.   

    模式Modal窗体可以返回模式结果ModalResult.
    你可以设置按钮的ModalResult属性为mrOK或mrAbort什么的。
    这样,如果窗体被关闭,就可以得到用户按的是什么按钮关闭窗体的。
    如果窗体没有被关闭,那么即使被click也不会返回ModalResult.
    所以你可以在设置按钮“确定”的ModalResult为mrOK,其Click下写:if Edit1.text='' then
      showmessage('Error')
    else
      close;
    就行了。
      

  9.   

    我试了,button设为mrOk之后,在button1的click的处理中这样
    if Edit1.text='' then
      showmessage('Error')
    else
      close;不行,当edit1为空,showmessage之后,TFrm_EditItem还是关闭了……置edit控件焦点让用户重新输入这个效果没出来……
      

  10.   

    MainForm传参数给subForm很简单:
    在subForm的类TsubForm中加入procedure MyShowModal(要传递的参数)
    procedure MyShowModal(要传递的参数)
    begin
       // do sth
       ShowModal;
    end;
      

  11.   

    补充:在MainForm中调用MyShowModal代替ShowModal就可以了。
      

  12.   

    修订我楼上的代码:
      设置按钮“确定”的ModalResult为mrNone,其Click下写:
      if Edit1.text='' then
        showmessage('Error')
      else
      begin
        close;
        Modalresult:=mrOK;
      end;
    mainform中调用写:
      if tform2.Create(self).ShowModal = mrOK then
        showmessage('OK');
    或者
      form2:=tform2.Create(self);
      //do something
      if form2.showmodal = mrOK then
        showmessage('OK');
    就可以了。
      

  13.   

    另外想说的是向form传递参数,我以为最好的办法是自己定义 构造函数。
    在form的public中写上: 
      constructor MyCreate(Owner: TComponent; Argument1,Argument2: integer);
    在form中定义两个变量:
      Arg1,Arg2:integer;然后写
    constructor TForm1.MyCreate(Owner: TComponent; Argument1,
      Argument2: integer);
    begin
      inherited Create(Owner);  Arg1:=Argument1;
      Arg2:=Argument2;end;这种方法可以实现简单的窗体重用。
      

  14.   

    原理和zhourongbiao(Edward) 的差不多。