.Net UserControl实现Show和ShowDialog方法

时间:2016-11-21 17:19:24

标签: c# .net winforms parent-child formclosing

我有一个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);
}

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

我读过有关发送"关闭"发送给ContainingForm的邮件,但使用Invoke也没有。

另外,在使用Show代替ShowDialog时,我是否还会遇到其他一些问题,因为表单不会阻止UI线程?

任何人都知道答案吗?

1 个答案:

答案 0 :(得分:0)

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

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