有没有办法来禁用父窗口按钮?我有一个被称为许多表单的“工作”表单,我想禁用父表单按钮,直到它完成它的事情。然后再打开它们。德尔福父窗体按钮
我想做一些附加到OnShow事件和onClose事件。
感谢
-Brad
有没有办法来禁用父窗口按钮?我有一个被称为许多表单的“工作”表单,我想禁用父表单按钮,直到它完成它的事情。然后再打开它们。德尔福父窗体按钮
我想做一些附加到OnShow事件和onClose事件。
感谢
-Brad
创建要打电话,因为形式:
unit fMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
fMyModalForm;
type
TfrmMain = class(TForm)
btnCall: TButton;
btn1: TButton;
btn2: TButton;
procedure btnCallClick(Sender: TObject);
private
{ Private declarations }
f : TfrmMyModalForm;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnCallClick(Sender: TObject);
begin
if not Assigned(f)
then begin
f := TfrmMyModalForm.Create(Self);
f.CallingForm := Self;
end;
f.Show();
end;
end.
:
unit fMyModalForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TfrmMyModalForm = class(TForm)
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
fCallingForm: TForm;
{ Private declarations }
public
{ Public declarations }
property CallingForm: TForm read fCallingForm write fCallingForm;
end;
(*
var
frmMyModalForm: TfrmMyModalForm;
*)
implementation
{$R *.dfm}
procedure TfrmMyModalForm.FormShow(Sender: TObject);
begin
fCallingForm.Enabled := False;
end;
procedure TfrmMyModalForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
fCallingForm.Enabled := True;
end;
end.
然后要调用这个模式窗体按钮后
如果你只是想禁用所有的按钮,你可以遍历它们,而不是disablin g CallingForm只会禁用CallingForm上的按钮。请参阅堆栈溢出主题(和我的答案):Cast a form dynamically已编辑:或查看_J_
(主要显示主题)的答案。
我会用行动代替按钮。
如果辅助窗口打开,执行某些操作并关闭,则可以使用ShowModal
而不是Show
来打开它,这样用户在第二个窗体关闭之前不能使用主窗体。
如果你想要遍历虽然所有的按钮和禁用或启用它们,代码会是这个样子:
var
i: Integer;
begin
for i := 0 to MainForm.ComponentCount - 1 do
if (MainForm.Components[i] is TButton) then
TButton(MainForm.Components[i]).Enabled := False;
end;
我不希望它作为ShowModal打开,因为其他进程在后台以其他形式进行,并且ShowModal根据我的意识停止这些进程(充其量,我是一名初学Delphi程序员) – Brad 2010-01-16 10:00:28
是,你是对的,我不知道这个事实。 – 2010-01-17 09:52:33
对于这样塞入你将只需要1行代码和TActionList组件。
使用操作创建操作列表并将操作链接到按钮。一个动作有一个OnUpdate事件,它可以让你确定是否应该启用动作(以及链接的按钮)。每次操作应该知道是否必须启用OnUpdate事件时,都会触发OnUpdate事件。
我正在想方设法确定发件人是谁,称为要打开的窗体,然后告诉该窗体禁用所有按钮。 – Brad 2010-01-16 10:07:20