WPF открывает новое окно при закрытии текущего окна в цикле - PullRequest
1 голос
/ 07 марта 2011

Я работаю над программой, которая читает текстовый файл и сохраняет его части в виде фрагментов в массиве, а затем (это теория) анализирует текст в каждом блоке (индексе) и заполняет серию текстовых полей анализируемымданные.Поскольку каждый блок будет содержать данные тех же полей, моя идея состоит в том, чтобы открыть новое окно, когда пользователь закрывает текущее, и обрабатывать данные в следующем индексе.Это будет продолжаться до тех пор, пока не будет достигнута длина массива.

Моя проблема в том, что я не знаю, как открыть новое окно и увеличить индекс массива для неизвестного числа индексов.

Этомой код для хранения кусков:

            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 ]

2 голосов
/ 07 марта 2011

Одна проблема, по-видимому, заключается в том, что вы подписываетесь на событие Закрытие в первой форме много раз, когда при этом формируются все остальные формы сразу.

Я бы рекомендовал использовать ShowDialog вместо Show.
ShowDialog блокирует выполнение, пока открытая форма не будет закрыта. Затем вы можете удалить любые события закрытия.

Тогда вы можете упростить все до цикла foreach.

foreach (var v in vArray)
{ 
    MainWindow mainWindow = new MainWindow();
    mainWindow.parser(v);
    mainWindow.ShowDialog();
}
1 голос
/ 07 марта 2011

Попробуйте Window.ShowDialog вместо шоу.

Разница в том, что с showdialog программа ожидает закрытия формы, прежде чем продолжить.

...