【问题标题】:Minimizing child modal form without minimizing main form and recover child modal form最小化子模态形式而不最小化主形式并恢复子模态形式
【发布时间】:2017-04-20 07:50:52
【问题描述】:

我有一个模态表单,它将执行一些长时间的操作,在该操作期间,用户希望最小化模态表单并在主表单中执行一些其他活动,并且模态表单的进度条显示在主表单状态栏中

当用户点击状态栏时,模态表单应该出现在用户面前。

总结:

  1. 我们有 Main Winform 和 Child Modal Winform
  2. 子模态窗体有一些较长的操作,由进度条显示
  3. 如果用户最小化子窗体。它完全最小化了 Main From
  4. 但用户只想最小化子窗体并在主窗体中进行一些操作

我尝试了两种方法

  • 从最小化事件中隐藏模式。子窗体被隐藏 然后我无法恢复子表单实例将其显示回来 自模态形式的对象被处置以来的主要形式

    使用 (Form1 reportForm = new Form1(dbConnection)) { reportForm.ShowDialog(); }

  • 如果我最小化模态表单,它也会最小化主表单。 在一个stackoverflow中提到模态表单被最小化然后主表单也将最小化主表单,这是设计的正确行为。

请给我一个解决这个问题的方法。

【问题讨论】:

  • 你说的没有多大意义。显示一些代码,我们不是在编写猴子代码
  • 答案显而易见。不要将第二种形式设为模态
  • 一个对话框会禁用应用程序中的所有其他窗口。因此,如果您将其最小化,那么用户将无法与之交互的其他窗口。操作系统解决了这个可用性问题,它也最小化了其他窗口。如果你想实现这个要求,你根本不能使用 ShowDialog()。请注意不要让用户再次启动相同的操作。正常的 UI 是状态栏中的进度条,仅在后台操作处于活动状态时才可见。

标签: c# forms winforms modal-dialog


【解决方案1】:

模态表单的全部意义在于用户不能在父表单中执行其他操作。

假设您的长期运行取决于模态表单的输入,您应该这样做:

  1. 保持表单模式
  2. 将长操作移到后台工作人员中
  3. 在模式窗体关闭时启动后台工作人员
  4. 打开新的非模态表单以显示后台工作人员的进度。

【讨论】:

  • 感谢您的回答。我需要将后台工作人员保留在主窗体中吗?
  • @kalidoss 是的。在这种情况下,后台工作人员应该在主窗体上。
【解决方案2】:

试试这个链接...

https://msdn.microsoft.com/en-us/library/7aw8zc76(v=vs.110).aspx

 protected void MDIChildNew_Click(object sender, System.EventArgs e){  
   Form2 newMDIChild = new Form2();  
   // Set the Parent Form of the Child window.  
   newMDIChild.MdiParent = this;  
   // Display the new form.  
   newMDIChild.Show();  
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多