2011-03-06 137 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不同的是,程序在繼續之前等待表單被關閉。