Как проверить, открыто ли окно и закрыть ли - PullRequest
2 голосов
/ 30 августа 2011

Я работаю над C # winforms .

У меня есть функция Validate(), которая присутствует в файле CS.Когда я вызываю функцию Validate(), она открывает ErrorForm, используя

ErrorForm ew = new ErrorForm(Errors); // Errors is list<string>
ew.Show();

Но когда я вызываю ее снова, открывается новое окно, и мое предыдущее окно также открыто.Я должен закрыть это окно вручную.

Есть ли какой-либо метод, доступный так, что если я снова вызову validate(), он закроет текущий ErrorForm и откроет новый ErrorForm.

Ответы [ 5 ]

2 голосов
/ 30 августа 2011

Попробуйте что-то вроде этого, псевдокод ..

public class MyClass 
{
    ErrorForm ew = null; 

    public void Validate() 
    {
       if(ew !=null && !ew.IsDisposed) 
          ew.Close(); 

       ew =  new ErrorForm(Errors);
       ew.Show();
    }
}
1 голос
/ 30 августа 2011

попробуйте это:

var f1=Application.OpenForms["ErrorForm"];       
if(f1!=null) 
  f1.Close(); 

f1=  new ErrorForm(Errors);
f1.Show();
1 голос
/ 30 августа 2011

Самое простое решение - это вызов ew.ShowDialog(this), который удерживает ErrorForm поверх главной формы.

Если вы действительно хотите вызвать метод Form.Show(), вы можете реализовать шаблон Singleton вErrorForm и вызов GetInstance.В методе GetInstance вы можете закрыть его или использовать повторно.

public class ErrorForm 
{
   private static ErrorForm instance;

   private ErrorForm() {}

   public static Singleton GetInstance()
   {
      if (instance == null)
      {
         instance = new ErrorForm();
      }
      else //OR Reuse it
      {
          instance.Close(); 
          instance = new ErrorForm();
      }
      return instance;      
   }

   public Errors ErrorMessages
   {
      set {...}
   }
}

В методе проверки

public void Validate() 
    {
       ErrorForm ef = ErrorForm.GetInstance();
       ef.ErrorMessages = errors;
       ef.Show();

    }
1 голос
/ 30 августа 2011

Вы можете использовать следующую коллекцию, доступную как статическое свойство: Application.OpenForms

0 голосов
/ 30 августа 2011

вы можете использовать ShowDialog ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...