我有一个BaseControl
课程,几乎可以完成我需要的所有控件。
我可以方便地从我的控件中实施void Show
和DialogResult 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);
}
我尝试了this post中建议的方法,因此在ShowDialog
方法中使用了Close。在使用上述帖子的原始版本和修订版本中,窗口都没有关闭。
我读过有关发送"关闭"发送给ContainingForm
的邮件,但使用Invoke
也没有。
另外,在使用Show
代替ShowDialog
时,我是否还会遇到其他一些问题,因为表单不会阻止UI线程?
任何人都知道答案吗?
答案 0 :(得分:0)
事实证明,以下代码似乎有效:
private void Close(DialogResult result) {
if (ContainingForm != null) {
ContainingForm.DialogResult = result;
ContainingForm.Close();
ContainingForm.Dispose();
}
}