1

Delphi でファイル マネージャを作成しようとしていますが、新しいフォルダを作成できるようにする必要があります。

そのため、メインフォームを取得し、ボタンを押すと、Create New Folder新しいフォルダー名を入力して作成を確認またはキャンセルできる他のフォームが表示されます。

そこで、フォルダー作成用の新しいフォームを作成し、非表示にしました。

私はこのようにしました-ここではメインフォームで手順を取得しました

procedure TfolderFrame.CreateFolder;
begin
  newFolderDialog.Visible:=true;
end;

そして、ここに新しいフォルダフォームがあります

unit FolderDialog;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,fileOperations, StdCtrls;

type
  TnewFolderDialog = class(TForm)
    edtName: TEdit;
    lblName: TLabel;
    btnOK: TButton;
    btnCancel: TButton;
    procedure btnOKClick(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    FolderName:String;
    kindOfAction:char;
    hasUpdated:Boolean;
  end;

var
  newFolderDialog: TnewFolderDialog;

implementation

{$R *.dfm}

procedure TnewFolderDialog.btnOKClick(Sender: TObject);
begin
  FolderName:=edtName.Text;
  if CreateDir(FolderName)
  then begin
    ShowMessage('New folder created!');

  end
  else begin
    ShowMessage('Creation failed. Error : '+ IntToStr(GetLastError));
  end;
  newFolderDialog.edtName.Clear;
  newFolderDialog.Close;
  hasUpdated:=True;
end;

procedure TnewFolderDialog.btnCancelClick(Sender: TObject);
begin
  newFolderDialog.edtName.Clear;
  newFolderDialog.Close;
end;

procedure TnewFolderDialog.FormActivate(Sender: TObject);
begin
  hasUpdated:=false;
end;

end.

問題は、TfolderFrame.CreateFolder;呼び出されたときに新しいフォルダーフォームが表示されるだけで、手順が終了することです。しかし、フォルダが作成された後、何か他のことをする必要がありますRefresh

私はこのようにしようとしてきました:

 procedure TfolderFrame.CreateFolder;
    begin
      newFolderDialog.Visible:=true;
     while not (newFolderDialog.hasUpdated) do begin
       if(newFolderDialog.hasUpdated) then
       RefreshAllStuff;
     end;
    end;

しかし、それが原因でプログラムが動かなくなりました。

Form2でフォルダの作成を確認した後でのみ、 Form1Refreshでプロシージャを呼び出すにはどうすればよいですか?

4

1 に答える 1

2

TForm.ShowModal()代わりに使用するコードを再設計します。

procedure TfolderFrame.CreateFolder;
begin
  if newFolderDialog.ShowModal = mrOk then
    RefreshAllStuff;
end;

procedure TnewFolderDialog.btnOKClick(Sender: TObject);
begin
  FolderName := edtName.Text;
  if CreateDir(FolderName) then
  begin
    ShowMessage('New folder created!');
    ModalResult := mrOk;
  end
  else
    ShowMessage('Creation failed. Error : '+ IntToStr(GetLastError));
end;

procedure TnewFolderDialog.btnCancelClick(Sender: TObject);
begin
  ModalResult =: mrCancel;
end;

procedure TnewFolderDialog.FormShow(Sender: TObject);
begin
  edtName.Clear;
end;
于 2013-09-29T18:11:14.337 に答える