在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Delphi中使用TXMLDocument控件应注意的问题 但是却遇到了非常奇怪的问题,下面分享一下 procedure TMainForm.Button1Click(Sender:TObject); Var XML:TXMLDocument; I:Integer; begin XML:=TXMLDocument.Create(nil); XML.LoadFromFile(ExtractFilePath(Application.ExeName)+'demo.xml'); XML.Active:=True; For I:=0 to XML.DocumentElement.ChildNodes.Count-1 do begin //do something end; XML.Free; end;
问题就出现在了For 循环上,当点击按钮后 程序执行到For循环就卡死,没有错误提示,没有任何征兆。debug跟踪结果就是执行到这里后就停止不动了。曾经也用过很多次TXMLDocument控件,但都是直接拖动一个控件到窗体上,从来没有发生过这种事情,就为了解决这个问题我花了一上午的时间。后来吃完饭之后一个意外改动,解决了这个问题。
原来,问题并不出在任何语法错误,而是在TXMLDocument实例进行初始化构造的时候,参数错了。应该将参数设置为Application或者Self,这样就可以顺利执行了。在Delphi中很多控件的AOwer参数都是可以为nil的,不知道为什么TXMLDocument在这个参数上这么特殊。
如果确实要将TXMLDocument控件应用于单元,也可以这样来解决,就是通过传递参数的方法
首先要引用Classes,xmldom, XMLIntf, msxmldom, XMLDoc
然后在自定义类的构造函数中加一个AOwer:TComponent参数 形如
type TMyClass=Class(TObject) public constructor Create(AOwer:TComponent);OverLoad; end;
implementation constructor TMyClass.Create(AOwer:TComponent;ConfigFile:WideString); XML.Free; end;
在调用这个类类时这样写
procedure TMainForm.Button1Click(Sender:TObject); Var MyObject:TMyClass; begin MyObject:=TMyClass.Create(self,ExtractFilePath(Application.ExeName)+'demo.xml') //do something MyObject.Free; end;
所用版本:Delphi 2007 Architect(with December 2007 update) |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论