2011-03-06 132 views
1

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

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

这是我的代码,用于存储块:

  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

有一个问题似乎是,您多次订阅第一个窗体上的Closing事件,此时所有其他窗体将立即弹出。

我会推荐使用ShowDialog而不是Show
ShowDialog阻止执行,直到打开的窗体关闭。然后,您可以删除任何关闭事件。

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

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

谢谢,这工作得很好! – user646265 2011-03-07 17:29:05

1

尝试Window.ShowDialog而不是显示。

与showdialog不同的是,程序在继续之前等待表单被关闭。