Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我读取xml文件时,它读取元素的副本_C#_Winforms - Fatal编程技术网

C# 当我读取xml文件时,它读取元素的副本

C# 当我读取xml文件时,它读取元素的副本,c#,winforms,C#,Winforms,当我运行我的程序并多次单击第二个选项卡时,它会多次创建标签,我不确定它们是否有一种只读取xml一次的方式。。。我试着用一种接近的方法,但对我来说不起作用。。。任何帮助都将不胜感激,谢谢 private void tabPage2_Enter(object sender, EventArgs e) { if (tabControl1.SelectedTab == tabPage2) { XmlDocument

当我运行我的程序并多次单击第二个选项卡时,它会多次创建标签,我不确定它们是否有一种只读取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;
            }
        }
    }

在不同的函数中读取xml。创建一个变量来存储是否已读取xml。只有在尚未调用xml reading函数时才调用它。

这是因为代码多次读取同一个xml文档,所以请尝试:

   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();
   }

嗯,是的,这很有道理让我试试看,thanx