delphi 操作TFrame类中的控件改变属性时出现的很奇怪的问题

这个Tframe类被嵌在主窗体中,然后通过这个frame窗体中的一个按钮showmodule了另外一个form窗体作为数据新增的窗体,我是要在数据保存完毕以后关闭这个fo... 这个Tframe类被嵌在主窗体中,然后通过这个frame窗体中的一个按钮showmodule了另外一个form窗体作为数据新增的窗体,我是要在数据保存完毕以后关闭这个form窗体并且刷新frame窗体中的grid控件中的数据和一些控件属性,但是我很奇怪的发现单纯的过程和函数都可以正常执行,但是只要是含有修改frame窗体中控件属性的代码只要一执行就会报错,完全搞不清楚是怎么回事:
弹出form的按钮过程:
procedure Temployeemanagefm.addbtClick(Sender: TObject);
begin
employeemssageform:=Temployeemssageform.Create(self);
employeemssageform_unit.savestate:=false;
employeemssageform.ShowModal;
end;

form窗口关闭的时候执行的语句:
procedure Temployeemssageform.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
employeemanagefm.StateEpBt.Caption:='查看离职员工';
end;
就上面这样的一行代码都无法执行,会报错
哪位达人能为在下解一下惑呢。。。?
展开
 我来答
dodolon
2014-04-13 · TA获得超过7713个赞
知道大有可为答主
回答量:4477
采纳率:84%
帮助的人:2108万
展开全部
这样子在两个窗体间用窗体对象的名称相互访问就很不规范,代码不好维护。这种模态窗体,一般要从工程选项的“自动建立窗体”中移除,并把窗体单元中Delphi自动定义的窗体变量删除,在窗体单元中自定义一个全局函数或过程,把窗体变量的定义、窗体的创建、调用、销毁等代码全部写在全局函数或过程中,与主窗体的数据传递通过该全局函数或过程的参数来完成。
追问
我感觉您说的这个问题也不是绝对的吧,如果需要执行的代码太多的话我我肯定会用函数和过程来封装,但是就这么两行代码,我也另外写一个过程貌似有点画蛇添足的嫌疑了。。。
另外您后面说的这些又是为什么呢?感觉是为了减少程序的体积。。。请原谅我的无知。。。能否详细告知这样做的意义和用处?
追答

当然什么问题都没有绝对的,也可以说这只是一个程序员的习惯或风格问题。各人看问题的观念不一样,对问题的感受也就不一样。这种做法也不是我创造出来的,我也是从别处学来的。我觉得这样做很好,所以我编程时通常都这样做。至于你怎么做,完全在于你对问题的看法。不过要说的是,这种做法并不能减少程序的体积。要问这样做的意义是什么,那完全是靠自己悟出来的。给个极其简单的例子(本来觉得没必要,还是放上),如果你感悟不到其中的意义,那就没有什么可说的了。

土豆快跑吧4E
2014-04-13
知道答主
回答量:13
采纳率:0%
帮助的人:8.2万
展开全部

显示的错误意思是访问了无效的内存地址,那应该是FormClose过程中 employeemanagefm 参数错误,可能是创建Temployeemanagefm窗体时并没有初始化变量employeemanagefm, 建议在 Temployeemssageform 中添加外部窗体引用,然后传入窗体,如

procedure Temployeemanagefm.addbtClick(Sender: TObject);
begin
  employeemssageform:=Temployeemssageform.Create(self);//按种创建方式也可以使用owner
  employeemssageform_unit.savestate:=false;
  employeemssageform.Femployeemanagefm := self; //添加的成员Femployeemanagefm
  employeemssageform.ShowModal;
end;

procedure Temployeemssageform.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Femployeemanagefm.StateEpBt.Caption:='查看离职员工'; //使用成员Femployeemanagefm 
end;

 

http://hi.baidu.com/lemtech

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式