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 ループを考慮して、このループを適切にフォーマットする方法がわかりません。

hereで説明されている 2 番目の方法を使用することを考えましたが、3 番目のステップのユーザー選択要素をその中に組み込む方法がわかりません。私は少し混乱しています!

助けてくれてありがとう。私は問題を説明するのが苦手なので、さらに情報や説明が必要な場合は質問してください。

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 に答える