WPF在当前窗口打开新窗口关闭循环

时间:2011-03-06 22:01:06

标签: c# event-handling for-loop vcard

我正在开发一个程序,它读取一个文本文件并将其中的部分内容存储在一个数组中,然后(这就是理论)解析每个块中的文本(索引)并用解析的文件填充一系列文本框数据。因为每个块都包含相同字段的数据,所以我的想法是在用户关闭当前字段并在下一个索引中处理数据时打开一个新窗口。这将持续到达到阵列的长度。

我的问题是我不知道打开一个新窗口并为未知数量的索引增加数组的索引。

这是我存储块的代码:

            using (StreamReader r = new StreamReader(fname))
            {

                string input = File.ReadAllText(fname);//read through file

                String[] vArray = input.Split(new string[] { "BEGIN:VCARD" }, StringSplitOptions.None); ...

然后我的处理代码是:

                            int i;

                        parser(vArray[1]);

                        MainWindow a = new MainWindow();
                        a.parser(vArray[2]);
                        a.Show();

                        for (i = 1; i < vArray.Length - 2; i++)
                        {                                
                            a.Closing += delegate(object sender, System.ComponentModel.CancelEventArgs e)
                            {
                                MainWindow b = new MainWindow();
                                b.parser(vArray[i++]);
                                b.Show();
                            };
                        }

这看起来非常明显,但我似乎无法得到它:)任何帮助都会受到欢迎和赞赏。

2 个答案:

答案 0 :(得分:2)

有一个问题似乎是您多次在第一个表单上订阅Closing事件,当表单形成所有其他表单时会立即弹出。

我建议使用ShowDialog代替Show ShowDialog阻止执行,直到打开的表单关闭。然后,您可以删除任何结束事件。

然后,您也可以将所有内容简化为foreach循环。

foreach (var v in vArray)
{ 
    MainWindow mainWindow = new MainWindow();
    mainWindow.parser(v);
    mainWindow.ShowDialog();
}

答案 1 :(得分:1)

尝试Window.ShowDialog而非show。

不同之处在于使用showdialog,程序会在继续之前等待表单关闭。