.Net UserControl 实现 Show 和 ShowDialog 方法



我有一个BaseControl类,几乎可以完成所有我需要的控件。

从我的控件中实现void ShowDialogResult ShowDialog方法对我来说很方便。

更新这是为了方便起见,因为我到处使用我的BaseControls,在某些情况下,我希望有可能用最简单的代码显示(显示对话框)它们......

以下是ShowDialog方法的代码,Show方法非常相似:

Form ContainingForm = null;
public DialogResult ShowDialog(string title, Control parent) {
ContainingForm = new Form();
this.Dock = DockStyle.Fill;
ContainingForm.Controls.Add(this);
ContainingForm.Text = title;
// 
DialogResult res = ContainingForm.ShowDialog();
ContainingForm.Close();
return res;
}
private void Close(DialogResult result) {
if (ContainingForm != null) {
ContainingForm.DialogResult = result;
// original code: form is not closing...
// ContainingForm.Close();
}
}
// button on BaseControl closing the control
protected void Button_Click(object sender, EventArgs e) {
this.Close(DialogResult.OK);
}

我尝试了这篇文章中建议的方法,因此在ShowDialog方法中关闭。在原始版本和使用上述帖子的修订版本中,窗口都没有关闭。

我读到了向ContainingForm发送"关闭"消息的信息,但使用Invoke也不起作用。

另外,在使用Show而不是ShowDialog时,我是否应该遇到其他问题,因为表单没有阻止UI线程?

有人知道这个问题的答案吗??

事实证明,以下代码似乎有效:

private void Close(DialogResult result) {
if (ContainingForm != null) {
ContainingForm.DialogResult = result;
ContainingForm.Close();
ContainingForm.Dispose();
}
}

最新更新