Типичное использование ShowDialog должно выглядеть следующим образом:
using (Form form = new Form())
{
// here setup your form instance
if (DialogResult.OK == form.ShowDialog())
{
// here read data from form instance
}
}
Обратите внимание, что ShowDialog () приводит к тому, что экземпляр формы не располагает себя. Вы должны утилизировать его вручную после того, как с ним покончено - следовательно, используйте предложение. См. http://msdn.microsoft.com/en-us/library/w61zzfwe.aspx для деталей. В вашем сценарии это должно выглядеть так:
public static DialogResult DoModal()
{
using (Form form = new TestForm())
return form.ShowDialog();
}
Но это полезно только тогда, когда вам не нужно читать какие-либо данные из экземпляра формы. Таким образом, единственный сценарий, который подходит здесь, это окно сообщения. Методы MessageBox.Show (...) используют шаблон, который вы хотите реализовать в своем посте.
в других сценариях формы должны возвращать данные, отличные от DialogResult, обратно в приложение после их закрытия. И именно поэтому стандартная форма не имеет статических методов ShowDialog () или DoModal (). Статический метод должен располагать временной формой экземпляра. Такое удаление сделало бы невозможным чтение данных обратно из формы. Более того, в сценарии статического метода нет экземпляра формы для чтения данных.
Собрав все вместе, ваш метод, чтобы соответствовать рекомендациям, должен выглядеть примерно так:
public static YourResultClass DoModal()
{
using (TestForm form = new TestForm())
if (DislogResult.OK == form.ShowDialog())
{
YourResultClass result = new YourResultClass();
// Here initialize YourResultClass instance with data from form instance
return result;
}
}
Но это очень специфично для конкретного случая использования и довольно далеко от вашего однострочного служебного метода.