Delphi中使用TXMLDocument控件應注意的問題


今天寫了一個類,其中用到了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)

http://blog.csdn.net/chaijunkun/article/details/5407793


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM