我需要比您通过 ShowDialog 获得的传统 OK 或 Cancel 状态更多的信息,即来自我的自定义对话框表单上的文本框中的一些字符串。
我想知道这是什么逻辑。我想这样称呼它:
CustomDialog d = new CustomDialog();
DoStuffWith(d.ShowDialog().CustomString);
当然,返回结果必须有一个自定义类。让我们像这样定义它:
class CustomDialogResult
{
public string CustomString { get; private set; }
public CustomDialogResult(string customString)
{
this.CustomString = customString;
}
}
然后我们需要在 CustomDialog : Form 中新建 ShowDialog 方法。我猜我们可以从表单的一些父显示开始。此外,向 OK 按钮添加一个事件处理程序,这将设置一个结果。
public CustomDialogResult CustomDialogResult { get; private set; }
private void buttonOK_Click(object sender, EventArgs e)
{
this.Result = new CustomDialogResult(this.TextBoxCustom.Text);
this.Close();
}
public CustomDialogResult ShowCustomDialog()
{
this.Show(Form.ActiveForm);
}
如您所见,问题在于等待单击 OK 按钮,然后返回 this.Result。我可以使用 Thread.Sleep(0) 或 ManualResetEvent,但这会阻止对话框表单上的输入。我将如何处理这个?我知道我可以使用更丑陋的语法,但如果 ShowDialog 做得很好,我们必须有一种方法。:)