Вы также можете создать подкласс формы ...
public class FormWithResult : Form
{
protected object FormResult { get; set; }
public DialogResult ShowDialog(out object result)
{
DialogResult dr = ShowDialog();
result = FormResult;
return dr;
}
public DialogResult ShowDialog(out object result, IWin32Window win)
{
DialogResult dr = ShowDialog(win);
result = FormResult;
return dr;
}
public void Return(object result)
{
FormResult = result;
Close();
}
}
Затем вы можете написать это для вызова модальной формы и получить результат
popup p = new popup();
object result;
p.ShowDialog(out result);
MessageBox.Show((string)result);
И в вашем всплывающем окнеформу, которую вы можете сделать:
FormResult = textBox1.Text;
Close();
ИЛИ
Return(textBox1.Text);
Чтобы закрыть форму и вернуть значение.
Форма подклассов, конечно, также имеет недостатки, ноЯ выброшу это как другое решение.
С другой стороны, универсальная версия, в которой вы могли бы строго ввести возвращаемое значение, была бы намного лучше, если бы не было этого ограничения во время разработки: Visual Studio 2008 Winform дизайнер не можетзагрузить форму, которая наследуется от универсального класса
. Если вы хотите получить асинхронные результаты, очевидно, это необходимо настроить.Я предполагаю, что вы используете модальные всплывающие окна.