2012-04-20 53 views
1

当我运行我的程序并多次单击第二个选项卡时,它会创建标签x次数,并且im不确定他们是否只能读取xml一次...我试图用一个.close方法,但没有工作对我来说...任何帮助,将不胜感激谢谢当我读取xml文件时,它读取元素的重复项

 private void tabPage2_Enter(object sender, EventArgs e) 
     { 

     if (tabControl1.SelectedTab == tabPage2) 
     { 


      XmlDocument xmlDoc = new XmlDocument(); 
      xmlDoc.Load("xmldoc.xml"); 
      foreach (XmlNode node in xmlDoc.SelectNodes("check/tick/mark")) 
      { 

       Label l = new Label(); 
       System.Drawing.Point l1 = new System.Drawing.Point(65, 48 + a); 
       l.Location = l1; 
       l.Text = node.SelectSingleNode("score").InnerText; 
       tabPage2.Controls.Add(l); 
       a += 25; 
      } 
     } 
    } 

回答

2

执行XML在不同的功能读书。创建一个变量来存储您是否已经读取了xml。如果尚未调用xml读取函数,请调用它。

+0

嗯是啊,让SENCE让我给它一个镜头,感谢名单 – Hashey100 2012-04-20 13:02:02

0

出现这种情况怎么一回事,因为你的代码读取相同的XmlDocument多时间,以便尝试:

bool read = false; 

    void ReadXmDocument() 
    { 
     using(XmlDocument xmlDoc = new XmlDocument()) 
     { 
      xmlDoc.Load("xmldoc.xml"); 
      foreach (XmlNode node in xmlDoc.SelectNodes("check/tick/mark")) 
      { 
       Label l = new Label(); 
       System.Drawing.Point l1 = new System.Drawing.Point(65, 48 + a); 
       l.Location = l1; 
       l.Text = node.SelectSingleNode("score").InnerText; 
       tabPage2.Controls.Add(l); 
       a += 25; 
      } 

      read = true; 
     } 
    } 

    private void tabPage2_Enter(object sender, EventArgs e) 
    { 
     if(tabControl1.SelectedTab == tabPage2 && read == false) ReadXmlDocument(); 
    }