访问用PageControl封装的窗体变量报内存错误,请教高人

richardi richardi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用PageControl封装窗体,当窗体创建后,再读取已创建的窗体变量时报内存错误,下面是所有代码:

program ShowFormDemo;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2}

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1); //注意,这里只创建Form1,其它窗体动态创建,如果都先创建就不报错
Application.Run;
end.


//下面是主窗体
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
PageControl1: TPageControl;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure ShowForm(AClass:TComponentClass;AForm:TForm);
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses Unit2,Unit3;
{$R *.dfm}
procedure TForm1.ShowForm(AClass:TComponentClass;AForm:TForm);//封装窗体的函数
var Tabsht: TTabSheet;
begin
Tabsht := TTabSheet.Create(Application);
Tabsht.PageControl:=PageControl1;
application.CreateForm(AClass,AForm);
AForm.Parent:=Tabsht;
Tabsht.Tag:=Integer(AForm);
AForm.BorderStyle:=bsNone;
AForm.Align:=alClient;
AForm.show;
Tabsht.Caption:=AForm.Caption;
PageControl1.ActivePage := Tabsht;
Tabsht.Show;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowForm(TForm2,Form2);
Form2.FVal:=100;//这里报错
end;
end.

//下面是Form2窗体
unit Unit2;

interface

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

type
TForm2 = class(TForm)
private
{ Private declarations }
public
FVal:Integer;//只定义一个变量
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

end.

如果2个窗体在工程文件中都先创建好了,就不会报错,我怀疑在ShowForm(TForm2,Form2)后,Form2是局部变量,导致访问出错,可是我创建时用的application.CreateForm(AClass,AForm);它的owner应该是Application这个全局对象啊,怎么回出错呢,请高人指点,谢谢。
...全文

相关推荐

APC.zip_PageControl _Um. . ._delphi pagecontrol_pagecontrol delp

PageControl是Delphi开发环境中一个常用控件,它允许在一个窗体中组织多个页面,每个页面通常包含不同的控件或功能。

Janice Lu

Delphi VCL开源控件集KControls详解:安装、核心组件与实战应用

在Delphi桌面应用开发中,VCL(Visual Component Library)一直是构建原生Windows界面的核心框架。为了提升界面交互与开发效率,开发者常常借助各类第三方控件集来扩展原生组件能力,其中开源控件集凭借透明、可控、无商业授权限制等优势备受青睐。KControls作为一套持续维护多年的VCL控件集,涵盖增强型页签、数据网格、树形视图、进度条等组件,可在不引入庞大商业包的前提下满足复杂业务界面的构建需求。本文从Delphi集成开发环境的组件安装与配置入手,介绍VCL控件包的标准安装流程

weixin_34050519

Lazarus跨平台开发实战:UTF-8编码、布局与事件处理避坑指南

跨平台GUI开发的核心挑战在于处理不同操作系统间的底层差异,这涉及字符编码、事件循环和界面渲染等多个技术层面。在字符编码方面,现代应用普遍采用UTF-8标准以实现国际化支持,但Windows系统内核使用UTF-16,这导致在跨平台交互时需进行编码转换,尤其是在与命令行工具等外部程序交互时。在界面布局上,不同平台的窗口管理器和部件集(如GTK2、Cocoa)对控件尺寸计算和事件分发机制存在差异,可能引发布局错位或事件重复触发等问题。这些底层原理的差异直接影响应用的稳定性和用户体验。本文以Lazarus升级为例

weixin_30522095

实现标签式的多页面窗体

如果遇到问题,Delphi的调试工具可以帮助定位和修复错误。综上所述,使用Delphi XE3创建标签式的多页面窗体是一项综合性的任务,涉及UI设计、事件处理、性能优化等多个方面。

hnhtwsl

Delphi7-PageControl-Tab窗口化源码

**错误处理和异常安全**:良好的代码会考虑到错误处理和异常安全,确保即使在某些意外情况下,程序也能稳定运行。这可能包括对非法操作的检查,以及适当的异常处理机制。

shangrand
评论 5
收藏 已收藏
分享
返回顶部
richardi
Delphi 5,944 成员 262,941 内容