0

这可能是一个非常简单的问题,但我正在学习!所以有些编程可能看起来有点业余!

我正在开发一个应用程序,它使用 WizardPages 控件来创建一个隐藏选项卡的类似向导的界面。向导有 5 个“步骤”,每个步骤都有自己的选项卡。

在向导的第 3 步中,根据用户选择加载一个 XML 文档。他们可以选择加载默认 XML 或提供自定义 XML 文件的路径。在步骤 3 的按钮单击事件中调用 loadXML() 方法,if 语句说“如果选择了默认选项,则从默认路径加载,否则从用户指定的路径加载”。然后,XML 的这种加载会在步骤 4 中填充一个列表框。我正在使用 XML to LINQ,正如您从下面的代码片段中看到的那样。

    private void loadXML()
    {
        if (configFilePathTextBox.Enabled == true)
        {
            // Load XML from that path
            XDocument config = XDocument.Load(configFilePathTextBox.Text);
            // Populate next screen
            IEnumerable<XElement> elList =
                from el in config.Descendants("software_entry")
                select el;
            foreach (XElement el in elList)
                listBox1.Items.Add(el.Attribute("name"));
            MessageBox.Show("Configuration file loaded successfully.");
        }
        else
        {
            // Load XML from default path
            XDocument config = XDocument.Load(Application.StartupPath + @"\config.xml");
            // Populate next screen
            IEnumerable<XElement> elList =
                from el in config.Descendants("software_entry")
                select el;
            foreach (XElement el in elList)
                listBox1.Items.Add(el.Attribute("name"));
            MessageBox.Show("Configuration file loaded successfully.");
        }
    }

这可行,但是有没有办法加载 XDocument 以便可以在所有方法中访问它?事实上,每次我想对它做任何事情时,我都必须使用 XDocument.Load 方法,并且在每次加载时,我必须使用相同的 if 语句来确定要加载哪个文件(默认或自定义)。

这真的很令人困惑,因为在我的应用程序的第 5 步中,我正在尝试创建一个 foreach 循环来遍历第 4 步中的列表框中的每个条目(由此 XML 文档填充),根据列表框(这只是软件的名称,其他属性包括文件类型、路径等),然后将一行写入包含所有这些信息的批处理文件。事实上,考虑到 XDocument 加载的 if 循环,我不知道如何正确格式化这个循环。

我考虑过使用此处描述的第二种方法,但我不确定如何将我的第三步中的用户选择元素合并到其中。我只是有点困惑!

谢谢你的帮助。我不擅长解释问题,所以如果您需要更多信息/说明,请提出问题。

4

1 回答 1

0

您需要在公共内部范围内声明它。例如,其他方法可以访问的类的公共内部属性。不过,您似乎并不关心这一点,因为您只想使用 program.cs 文件。

要将其用作字段,您的代码可能变为:

public class Program
{
    XDocument document;

    private void loadXML()
    {            
        if (configFilePathTextBox.Enabled == true)
        {
            document = XDocument.Load(configFilePathTextBox.Text);
        }
        else
        {
            document = XDocument.Load(Application.StartupPath + @"\config.xml");
        }

        IEnumerable<XElement> elList =
            from el in document.Descendants("software_entry")
            select el;

        foreach (XElement el in elList)
            listBox1.Items.Add(el.Attribute("name"));

        MessageBox.Show("Configuration file loaded successfully.");
    }
}
于 2013-02-15T19:59:08.907 回答