对象没有创建,居然可以访问?

handsome1234 2005-08-14 06:44:15
var
FormSelectPrintItem: TFormSelectPrintItem;
Kind:String;
StrType1,StrTypeDB2:TStringList;//应该算是全局变量吧?
implementation

{$R *.dfm}

function ShowFormSelectPrintItem(Dataset:TDataset;Kind:String;StrType:TStringList;StrTypeDB:TStringList): Boolean ;
var
test:String;
begin
//SelectPrintItem_Frm.StrType1:=TStringList.Create;
SelectPrintItem_Frm.StrTypeDB2:=TStringList.Create;
SelectPrintItem_Frm.StrType1:=StrType;
test:=SelectPrintItem_Frm.StrType1.text;//没创建SelectPrintItem_Frm.StrType1,用SelectPrintItem_Frm.StrType1.text居然能够运行,不出现异常,不太明白???

...全文
189 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqhhh 2005-08-15
  • 打赏
  • 举报
回复
应该是自动创建了!
xiaocuo_zrf 2005-08-15
  • 打赏
  • 举报
回复
同意aiirii
aiirii 2005-08-15
  • 打赏
  • 举报
回复
oh, 我应该明白你要问的了,

在 delphi 的菜单 Project - Options - Forms
中看看,应该你的 FormSelectPrintItem 已经是自动创建的了,所以...
ly_liuyang 2005-08-15
  • 打赏
  • 举报
回复
晕~~

SelectPrintItem_Frm.StrType1:=StrType 都已经改变了SelectPrintItem_Frm.StrType1了

StrType1.text就是StrType.text,当然能用

_____________________
http://lysoft.7u7.net
handsome1234 2005-08-15
  • 打赏
  • 举报
回复
我那几个不是类的成员变量,是全局变量。
var
FormSelectPrintItem: TFormSelectPrintItem;
Kind:String;
StrType1,StrTypeDB2:TStringList;//应该算是全局变量吧?
implementation

{$R *.dfm}
StrTypeDB2是变量没有被创建就可以使用?
SelectPrintItem_Frm.StrType1:=StrType;
test:=SelectPrintItem_Frm.StrType1.text;//?????????
怎么说TStringList类型的变量不用创建就可以使用?不是很明白!?
福贵 2005-08-15
  • 打赏
  • 举报
回复
路过学习
skyewang 2005-08-15
  • 打赏
  • 举报
回复
SelectPrintItem_Frm.StrType1:=StrType;//SelectPrintItem_Frm.StrType1指向StrType实例
test:=SelectPrintItem_Frm.StrType1.text;//test实际上是等于StrType.Text

很正常嘛,本来就没有问题。
aiirii 2005-08-15
  • 打赏
  • 举报
回复
var
FormSelectPrintItem: TFormSelectPrintItem;
Kind:String;
StrType1,StrTypeDB2:TStringList;//应该算是全局变量吧?


我感觉直接用
StrTypeDB2 := ...
StrType1 := ...
就可了,与 SelectPrintItem_Frm 无关
xthmpro_cn 2005-08-15
  • 打赏
  • 举报
回复
靠你真是太菜了。
类的成员除非特别需要,一般类的成员对象都由类自己负责创建。
rgbwoo 2005-08-15
  • 打赏
  • 举报
回复
SelectPrintItem_Frm.StrType1:=StrType;
这句表明
SelectPrintItem_Frm.StrType1和StrType指向堆的同一个位置,也就是说两个对象引用的是同一个对象,所以不用创建也能用咯
亮剑_ 2005-08-15
  • 打赏
  • 举报
回复
StrType1当然算是全局变量,还有你这个单元(Unit)的名称应该是叫SelectPrintItem_Frm吧,这样SelectPrintItem_Frm.StrType1也就相当于StrType1,前面可以省略掉
SelectPrintItem_Frm.StrType1 := StrType;
这一句给全局变量StrType1赋值了,把形参StrType赋给它了。而它们是TStringList类的实例,可以理解成就是赋了地址。这时全局变量StrType1也就是你调用此函数时传过来的StrType。你在调用时如果创建过了,那当然就有了。
handsome1234 2005-08-14
  • 打赏
  • 举报
回复
还有个问题:
Kind:String;//在全局变量区
调用时
SelectPrintItem_Frm.Kind:=Kind;应该可以直接这样吧?但是SelectPrintItem_Frm.Kind我也没有create阿,怎么可以用?难道他属于基本类型?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧