Delphi在运行时重建模式形式

丘卡斯

例如,我为您创建了一个小项目,以帮助您了解我要实现的目标。

我有一个ModalForm,它在运行时创建了一些按钮,但是当用户按下“特殊按钮”时,我希望将窗体中的所有按钮删除,因为其他按钮将在运行时创建。这是一个示例代码

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    button : TButton;
begin
    button := TButton.Create(Self);
    button.Parent := Form2;
    button.Caption := 'New Button';
    button.Top := 50;
    button.Left := 200;
    Form2.ShowModal;
end;

end.


unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var

button : TButton;
begin
    Form2.CloseModal;
    button := TButton.Create(Self);
    button.Parent := Form2;
    button.Caption := 'New Button';
    button.Top := 60;
    button.Left := 200;
// Form2.CloseModal;
    Form2.ShowModal;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
      ShowModal;
end;

end.

现在在此示例中,我在表单上有3个按钮,当我单击按钮1时,我希望出现第4个按钮。但是,如果我运行我的代码,我会得到错误

“无法使可见窗口模态化”

我读到这与我没有正确关闭Form2有关。如果我关闭Form2并单击Form1中的按钮(与Form2中的按钮相同的代码),它将起作用,并且我得到第四个按钮Form2。

现在我的问题是,如何通过单击Form1中的按钮和Form2中的按钮来获得此结果。

爱因

您无需关闭并(重新)显示表单即可向其动态添加控件。在您的TForm2.Button1Click方法中摆脱Form2.CloseModalForm2.ShowModal调用,即

procedure TForm2.Button1Click(Sender: TObject);
var button : TButton;
begin
    button := TButton.Create(Self);
    button.Parent := Self;
    button.Caption := 'New Button';
    button.Top := 50;
    button.Left := 200;
end;

应该管用。

顺便说一句,Form2按钮添加按钮TForm1.Button1Click()只是不好的设计,不要那样做(一种形式不应该改变其他形式)。而是在Form2中有一个创建按钮的方法,然后其他表单可以调用该函数。或重写Form2的构造函数,以便它采用一个额外的参数,该参数指示特殊按钮是否可见。

要删除按钮,您只需调用Free它们即可。即删除表格上的所有按钮

for x := ControlCount - 1 downto 0 do begin
   if(Controls[x] is TButton)then Controls[x].Free;
end;

但是,如果您具有预定义数量的按钮,最好在设计时全部创建它们,然后Visible根据需要更改属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以在RTL类System.Classes.TStream中修改常量,并在运行时在Delphi XE6中重建它吗?

来自分类Dev

Delphi:在运行时以动态创建的形式创建TComboBox

来自分类Dev

如何在运行时管理Quartz作业的集群模式?

来自分类Dev

我该如何存储可以在运行时在Delphi中更改的文件路径

来自分类Dev

为什么我的类在运行时未定义。Javascript模块模式

来自分类Dev

在运行时检测应用程序是否处于发布模式

来自分类Dev

Delphi-在运行时创建引用对象时遇到麻烦

来自分类Dev

猫鼬-是否可以在运行时动态添加方法以建模?

来自分类Dev

Delphi / Firemonkey在运行时更改iOS屏幕旋转

来自分类Dev

Delphi:如何在运行时构建的TVarRec数组中使用Format()?

来自分类Dev

c#在运行时以调试模式显示设置值

来自分类Dev

Delphi XE7 BDE Alias-是否在运行时设置?

来自分类Dev

如何在运行时不仅在场景中以小控件的形式绘制线条?

来自分类Dev

C#/ Regex模式可用于在线测试,但不能在运行时

来自分类Dev

在运行时在Delphi中从数据库表创建按钮

来自分类Dev

Delphi XE2在运行时不考虑组件属性

来自分类Dev

如何在运行时在AngularJS中创建模块?

来自分类Dev

在运行时以Windows形式C#移动Web浏览器

来自分类Dev

当特定程序正在运行时,如何禁用睡眠模式(Windows 7)?

来自分类Dev

在运行时以字符串形式编译Scala源

来自分类Dev

在Oracle Apex 5中无法在运行时更改解析模式

来自分类Dev

在运行时创建的对象上的双击事件-Delphi

来自分类Dev

从字符串在运行时创建Delphi Firemonkey组件

来自分类Dev

从Postscript创建PHP PDF,并在运行时以附件形式发送电子邮件

来自分类Dev

在运行时从 django 添加/删除 url 模式

来自分类Dev

在运行时将不同的参数传递给未知形式

来自分类Dev

在运行时打开无模式表单 - VBA Excel

来自分类Dev

Delphi Firemonkey 在运行时创建 TExpanders 和 TLabels

来自分类Dev

Delphi 和高 DPI:在运行时创建的控件获得错误的位置

Related 相关文章

  1. 1

    我可以在RTL类System.Classes.TStream中修改常量,并在运行时在Delphi XE6中重建它吗?

  2. 2

    Delphi:在运行时以动态创建的形式创建TComboBox

  3. 3

    如何在运行时管理Quartz作业的集群模式?

  4. 4

    我该如何存储可以在运行时在Delphi中更改的文件路径

  5. 5

    为什么我的类在运行时未定义。Javascript模块模式

  6. 6

    在运行时检测应用程序是否处于发布模式

  7. 7

    Delphi-在运行时创建引用对象时遇到麻烦

  8. 8

    猫鼬-是否可以在运行时动态添加方法以建模?

  9. 9

    Delphi / Firemonkey在运行时更改iOS屏幕旋转

  10. 10

    Delphi:如何在运行时构建的TVarRec数组中使用Format()?

  11. 11

    c#在运行时以调试模式显示设置值

  12. 12

    Delphi XE7 BDE Alias-是否在运行时设置?

  13. 13

    如何在运行时不仅在场景中以小控件的形式绘制线条?

  14. 14

    C#/ Regex模式可用于在线测试,但不能在运行时

  15. 15

    在运行时在Delphi中从数据库表创建按钮

  16. 16

    Delphi XE2在运行时不考虑组件属性

  17. 17

    如何在运行时在AngularJS中创建模块?

  18. 18

    在运行时以Windows形式C#移动Web浏览器

  19. 19

    当特定程序正在运行时,如何禁用睡眠模式(Windows 7)?

  20. 20

    在运行时以字符串形式编译Scala源

  21. 21

    在Oracle Apex 5中无法在运行时更改解析模式

  22. 22

    在运行时创建的对象上的双击事件-Delphi

  23. 23

    从字符串在运行时创建Delphi Firemonkey组件

  24. 24

    从Postscript创建PHP PDF,并在运行时以附件形式发送电子邮件

  25. 25

    在运行时从 django 添加/删除 url 模式

  26. 26

    在运行时将不同的参数传递给未知形式

  27. 27

    在运行时打开无模式表单 - VBA Excel

  28. 28

    Delphi Firemonkey 在运行时创建 TExpanders 和 TLabels

  29. 29

    Delphi 和高 DPI:在运行时创建的控件获得错误的位置

热门标签

归档