Button2  一执行不会是我想要的目录,而是Button1执行后OpenDialog1的目录, Why?
procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.InitialDir := P;
  if OpenDialog1.Execute then
    P := ExtractFilePath(OpenDialog1.FileName);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  OpenDialog1.InitialDir := 'C:';
  OpenDialog1.Execute;
end;

解决方案 »

  1.   

    在你的button2事件裏,是不是沿用了button1的事件!
      

  2.   

    当OpenDialog1.Execute=True那么他的FileName将永远保存,直到Destroy为止.你试着每次都取消那么就能达到你的目的了.
      

  3.   

    //看看这个
    var
      Form1: TForm1;
      P:string;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      OpenDialog1.FileName :='';
      OpenDialog1.InitialDir := P;
      if OpenDialog1.Execute then
        P := ExtractFilePath(OpenDialog1.FileName);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      OpenDialog1.FileName :='';
      OpenDialog1.InitialDir := 'C:';
      OpenDialog1.Execute;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    p:='d:\'
    end;end.
      

  4.   

    OpenDialog1.Execute;执行的是下面的操作function TOpenDialog.Execute: Boolean;
    begin
      Result := DoExecute(@GetOpenFileName);
    end;GetOpenFileName返回上次打开文件夹的指针,你查查DoExecute函数,它里面根本没有考虑InitialDir 属性,所以
      

  5.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      OpenDialog1.InitialDir := 'C:\';
      OpenDialog1.Execute;
    end;
      

  6.   

    加个OpenDialog1.CleanupInstance;就ok了,但是有没有不良后果我不知道:)
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      OpenDialog1.InitialDir :=P;
      if OpenDialog1.Execute then
        P := ExtractFilePath(OpenDialog1.FileName);
      OpenDialog1.CleanupInstance;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      OpenDialog1.InitialDir := 'C:\';
      OpenDialog1.Execute;
      OpenDialog1.CleanupInstance;
    end;
      

  7.   

    你的opendialog如果是动态的创建就不会这个问题。
      

  8.   

    foxyy8888(Bigchennotlittle) 答对了结帐