关于动态窗口的释放和ThemeEngine的问题 VCL组件开发及应用http://www.delphi2007.net/DelphiVCL/html/delphi_20061221110256226.html
首先第一个问题
我有个动态查询窗口FORM3,当我在form1里按BUTTON1的时候,创建FORM3,并且把查询数据库的结果返回给FORM3上的STRINGGRID1中,当我点下form3的button1(fORM3.BUTTON1的MODALRESULT=MROK)时候,希望把结果返回到form1.edit1.text中,具体语句如下:
if query.frmQuery.ShowModal=mrOk then begin
showmessage('123');
edit1.Text :=trim(query.frmQuery.StringGrid1.Cells[GlobleJ-1,query.frmQuery.StringGrid1.Row]);
end;
如果在不在FORM3的close动作里写action:=cafree; 上面的语句就没问题,如果写了action:=cafree;,把showmessage去掉也没问题,但是加上showmessage就会报错,有点迷惑了,这里总是似懂非懂,请大家帮忙解释下为什么.
第2个问题,我上面的查询窗口没用ThemeEngine的时候使用正常,如果我把窗体全换成ThemeEngine的之后就会报错,错误提示如下:Project project1.exe raised exception class ElistError with message 'list index out of bounds(-1)' Process stoped USE step or run to continue.
这个是为什么呢?
在两个对话框间使用消息通讯机制好了,安全些
或者showmessage改成Application.ShowMessage();
第二个是索引越界,检查一下list下标引用
加了action:=cafree会导致窗体关闭后,立即进行了释放,如果窗体关闭还要用它里面的内容,最好不要加释放语句。
LIST下標引用這裡能不能說的再詳細點呢?
如果frmQuery已经释放了,引用它里面的对象肯定不行了。
只要对象在,你可以调试一下呀,看看下标的范围,看一下是否引用已超出了这个范围
list里下标索引是基于0的,如list里有5个元素,下标从0到4
问题解决,谢谢楼上的两位。