我有2个form:MainForm和SelectDIRForm
MainForm是主界面,SelectDIRForm是一个选择目录的界面,就像flashget中选择下载文件存放目录的那种界面。
MainForm有2个Edit和2个SpeedButton,两个SpeedButton的click事件都是创建SelectDIRForm,在选择目录后销毁SelectDIRForm,并返回选择的目录路径到和SpeedButton对应的Edit中问题是这样的,我想让按SpeedButton1后返回的值赋到Edit1中,按SpeedButton2后返回的值赋到Edit2中,我想请问该怎么确定是哪个SpeedButton被按下了,即返回的路径应该赋到Edit1还是Edit2代码:=======MainForm的========
procedure TMainForm.SpdBtn_1Click(Sender: TObject);
begin
  Application.CreateForm(TSelectDir, SelectDir);
  SelectDir.ShowModal;
end;procedure TMainForm.SpdBtn_2Click(Sender: TObject);
begin
  Application.CreateForm(TSelectDir, SelectDir);
  SelectDir.ShowModal;
end;
============SelectDIRForm的================
procedure TSelectDir.Button1Click(Sender: TObject);
var
  str: String;
begin
  str:= ShellTreeView1.SelectedFolder.PathName;
  if copy(str,pos(':',str)+1,1) <> '\' then str:=str + '\';
  //就是这里,我想应该有个判断,来分别应该把值赋到哪个Edit中
    MainForm.Edit1.Text:= str
  
    MainForm.Edit2.Text:= str;
  Close;
end;

解决方案 »

  1.   

    你在选择完路径,关闭之前,返回一个值给MainForm,让MainForm自己赋值,不就可以了。
      

  2.   

    使用showmodal,返回不同的值就可以了
      

  3.   

    在mainform的public下定义一个值,比如:Path:String;然后就这样:
    procedure TSelectDir.Button1Click(Sender: TObject);
    var
      str: String;
    begin
      str:= ShellTreeView1.SelectedFolder.PathName;
      if copy(str,pos(':',str)+1,1) <> '\' then str:=str + '\';
        MainForm.Path:= str;
      Close;
    end;==============================
    procedure TMainForm.SpdBtn_1Click(Sender: TObject);
    begin
      Application.CreateForm(TSelectDir, SelectDir);
      SelectDir.ShowModal;
      Edit1.Text := Path;
    end;procedure TMainForm.SpdBtn_2Click(Sender: TObject);
    begin
      Application.CreateForm(TSelectDir, SelectDir);
      SelectDir.ShowModal;
      Edit2.Text := Path;
    end;PS:但是我不赞成这样的方法,因为如果你可能弹出了SelectDir这个Form,但是没有选择路径,那么Edit里面得到的就是错误的路径。
      

  4.   

    flyforlove(为情飞)  大哥,用showmodal返回不同的值怎么返回,我之前没用到过,可以说详细点吗?
      

  5.   

    介绍另一种方法给你:
    1、定义一个函数用来现在这个SelectDir窗口。
    function TMainForm.showSelectDir(var Path: String): Boolean;       
    begin
      SelectDir := TSelectDir.Create(nil);
      Result := SelectDir.ShowModal = mrOK;
      Path := SelectDir.filedir;
      SelectDir.Free;
    end;2、在SelectDir中定义一个public变量filedir(String),再加两个按钮Btn1和Btn2,分别是‘选择路径’和‘退出’。
    其中‘选择路径’:
    procedure TSelectDir.Btn1Click(Sender: TObject);
    begin
      filedir := self.DirectoryListBox1.Directory;
      self.ModalResult := mrOK;
    end;‘退出’:
    procedure TSaveDirF.Btn2Click(Sender: TObject);
    begin
      ModalResult := mrCancel;
    end;调用的时候:
    if not showSelectDir(Edit1.Text) then Edit1.Text := '';
    或者:
    if not showSelectDir(Edit2.Text) then Edit2.Text := '';
      

  6.   

    这个就是用ModalResult返回不用的值来做判断的
    ^_^
      

  7.   

    如果你要得到SelectDIRForm中目录的字符串的话,当然要借助于公用单元的一个变量来存储,
    然后根据showmodal的返回值来判断,你按得是确定,还是取消,比如在SelectDIRForm窗体中,
    你点击的是确定,可以在这个按钮的点击事件里写
    ModalResult:=ID_OK;如果点击的时取消按钮的话,就是ModalResult:=ID_CANCEL;然后在你的MainForm窗体中,
    procedure TMainForm.SpdBtn_1Click(Sender: TObject);
    begin
      Application.CreateForm(TSelectDir, SelectDir);
      if SelectDir.ShowModal=ID_YES then
         Edit1.Text := Path;
    end;procedure TMainForm.SpdBtn_2Click(Sender: TObject);
    begin
      Application.CreateForm(TSelectDir, SelectDir);
      if SelectDir.ShowModal=ID_YES then
         Edit2.Text := Path;
    end;
      

  8.   

    谢谢  flyforlove(为情飞) 你的回答给了我很多帮助!谢谢!
      

  9.   

    呵呵,还有 Kevin_Lmx(繁华阅尽),谢谢大家