我的程序里一个单元文件里访问主窗体里的控件(无论哪个控件)的属性,都会报EAccessViolation错误,如:str:=mainfrom.label1.caption
请问这是什么原因,这要怎么解决?我的窗体及其他控件都不是动态创建的。

解决方案 »

  1.   

    搜一下有没有Mainfrom:=nil之类似的代码?
      

  2.   

    能编译吗? 单元文件中有没有USES 主窗体单元? 还有主窗体是不是给释放了如象如下的代码
    MainFrom.free;
    MainFrom:=nil;
      

  3.   

    可能你的MainFrom在使用這個str:=mainfrom.label1.caption前已經被釋放了?
      

  4.   

    上面说的情况都没有,我的程序只有一个主窗体,因为程序调用的函数太多,就把这些函数放到另外一个unit里面了,都没有出现释放资源的情况。现在就出现这个问题了。很郁闷啊!
      

  5.   

    要么就是你的另一个单元文件中将 主窗口释放了!
    在另一个单元文件中找找  MainFrom.free;
    MainFrom:=nil;
      

  6.   

    你的函数调用是不是在 窗体 creat函数中进行的 
    如果是换到show函数里面
      

  7.   

    代码太长了,也涉及到公司里的一些东西,贴出来大家也看不明白的。我并没有释放什么东西。就只有一个函数里创建了一个TStringList,也没调用,即使屏蔽掉这段代码也出错。函数的调用都不是在窗体创建的时候。所以我搞不懂为什么了。
      

  8.   

    有没有出错前的版本?如果有的话,比较两个版本,找出修改过的部分,问题很可能出在修改过的部分里面。把整个项目保存一个副本,然后试编译运行,当然你应该仍然看到那些错误,然后你就想办法去掉一些代码,如果你的程序的模块化工作做得还不错,这一点应该可以做到,于是你的程序就瘦了一些,看看它能不能运行,如果不能,再把瘦一些的项目保存一个副本,再让它瘦一些,再试。每次去掉的都应该是你怀疑最有可能出问题的代码。你觉得谁最可疑?就先把它干掉。以上方法剽窃自《程序设计实践》,可以的话,把这本书找来,看看第5章里面有没有能够用到的方法。因为具体代码不方便公开,所以请高手直接指出错误地点是不可能了,让大家(CSDN里面的,办公室里面的,有QQ的同行)尽量多出主意吧,说不定哪一个办法就管用了。
      

  9.   

    看看被调用窗体的单元文件uses进去没有,
    如果已经uses进去的话,看看哪里用了form1.free,form1:=nil;
      

  10.   

    上述的两种情况都会EAccessViolation的报错。
      

  11.   

    对了,我用了skinEngine皮肤控件,会不会是这个原因呢?
      

  12.   

    哈哈,skinEngine很容易出现这个问题的。