Delphi中使用TXMLDocument控件应注意的问题

delphiconstructorxmlclass今天写了一个类,其中用到了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);
begin
  XML:=TXMLDocument.Create(AOwer);// 重点就在这
  XML.LoadFromFile(ConfigFile);
  // do something

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)

最新文章

  1. Ajax.BeginForm VS Html.BeginForm
  2. ASP.NET MVC 4 RC的JS/CSS打包压缩功能 Scripts.Render和Styles.Render
  3. CSS实现特殊效果
  4. 阿里云主机上安装jdk
  5. 轻量级应用开发之(08)UITableView
  6. CocoStudio基础教程(4)骨骼动画的动态换肤
  7. 扩展ServiceHost<T>类
  8. GNU_makefile_template
  9. Zepto源码解读
  10. 4 weekend110的textinputformat对切片规划的源码分析 + 倒排索引的mr实现 + 多个job在同一个main方法中提交
  11. SGU 230. Weighings (拓扑排序)
  12. 深入char、varchar、text和nchar、nvarchar、ntext的区别详解
  13. ThreadLocal原理及使用示例
  14. .NET Core装饰模式和.NET Core的Stream
  15. resteasy简单实例
  16. 安卓开发:UI组件-RadioButton和复选框CheckBox
  17. swift 学习- 16 -- 构造过程 02
  18. Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
  19. 《C++ Primer》笔记-inline内联函数
  20. protobuf 协议 windows 下 C++ 环境搭建

热门文章

  1. 3、bootstrap3.0 栅格偏移 布局中的一个特产
  2. 我的Hibernate入门
  3. Bad owner or permissions on .ssh/config
  4. ES6-个人学习笔记一--let和const
  5. 【python】【转】Python生成随机数的方法
  6. SEMAT[软件工程方法和理论 Software Engineering Method and Theory]
  7. 领域驱动设计(Domain Driven Design)参考架构详解
  8. 移动App设计之分层架构+MVC
  9. 关于if/else if
  10. matlab的常用快捷键