1

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

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

这是我存储块的代码:

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

这似乎很明显,但我似乎无法理解:) 任何帮助都会受到欢迎和赞赏。

4

2 回答 2

2

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

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

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

foreach (var v in vArray)
{ 
    MainWindow mainWindow = new MainWindow();
    mainWindow.parser(v);
    mainWindow.ShowDialog();
}
于 2011-03-06T22:05:49.550 回答
1

尝试Window.ShowDialog而不是展示。

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

于 2011-03-06T22:06:50.900 回答