Можно ли снова показать и закрыть диалоговое окно? - PullRequest
4 голосов
/ 23 июля 2010

Некоторый контекст здесь ... У меня есть System.Windows.Window, которое используется для отображения модального окна сообщения. Я создал метод Show (), который инициализирует содержимое окна, а затем вызывает ShowDialog (). Пользователь нажимает кнопку в этом окне, некоторая информация о нажатой кнопке задается в свойстве Tag, а затем окно закрывается с помощью Close ().

Как и ожидалось, я получаю исключение ShowDialog при попытке вызвать ShowDialog () для окна, как только оно было закрыто. Есть ли способ повторно использовать тот же экземпляр Window, чтобы мне не приходилось обновлять экземпляр каждый раз, когда мне нужно окно сообщения?

Например ...

MessageBoxWindow mbw = new MessageBoxWindow();
result = mbw.Show("caption", "message 1");

mbw.Show("caption", "message 2");
// The above throws an exception, so I have to do this...
mbw = new MessageBoxWindow();
result = mbw.Show("caption", "message 2");

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 23 июля 2010

Используйте .Hide () вместо .Close (). Это удаляет это, не разрушая это. Затем при необходимости вы можете снова вызвать Show ().

 MainWindow test = new MainWindow();
  test.Show();
  test.Hide();
  test.Show();
0 голосов
/ 23 июля 2010

Вы можете добавить событие FormClosing, которое отменяет закрытие формы и вместо этого устанавливает для Form.Visible значение false. Тогда вам также понадобится метод Show, который проверяет, является ли эта форма пустой, чтобы вы знали, нужно ли вам создавать новую форму или просто показывать ту, которая у вас уже есть.

Например:

private void FormMessageBox_FormClosing(object sender, FormClosingEventArgs e)
{
  //This stops the form from being disposed
  e.Cancel = true;
  this.Visible = false;
}

public static void Show(FormMessageBox formMessageBox, string message)
{
  //if formMessageBox is null we need to create a new one otherwise reuse.
  if (formMessageBox == null)
  {
    formMessageBox = new FormMessageBox(message);
    formMessageBox.ShowDialog();
  }
  else
  {
    formMessageBox.lblMessage.Text = message;
    formMessageBox.Visible = true;
  }
}
...