【问题标题】:.Net UserControl implementing Show and ShowDialog methods.Net UserControl 实现 Show 和 ShowDialog 方法
【发布时间】:2016-11-21 17:19:24
【问题描述】:

我有一个 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 方法中关闭。在原始版本和使用上述帖子的修订版本中,窗口都没有关闭。

我读到过向ContainingForm 发送“关闭”消息,但使用Invoke 也不起作用。

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

有人知道答案吗?

【问题讨论】:

  • Form 有什么问题让你尝试这样的事情?
  • Form 类没有参数化构造函数,所以很清楚这里发生了什么:ContainingForm = new Form(parent);
  • 为了兼容非winforms项目的继承...
  • @LarsTech => 我更正了代码,这是一个错字...
  • 到底是什么问题?我已经尝试过这段代码,它在我这边运行良好。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-25
    • 2010-09-19
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多