【问题标题】:Minimizing and restoring a form while showing another form在显示另一个表单时最小化和恢复一个表单
【发布时间】:2016-09-30 01:26:28
【问题描述】:

我有 2 个表单,其中一个通过单击第一个中的按钮来显示。我希望这样当单击显示第二个表单的按钮时,第一个表单被最小化,第二个表单正常打开。当第二个窗体被关闭时,第一个窗口应该不会被最小化并被放置在它之前的位置。

用户可以覆盖它,只需单击快速启动区域中的第一个表单,如果他/她愿意,就可以调出第一个表单,所以我不想要第二个对话框类型的表单。

我正在尝试下面的代码,但是当我单击按钮时,第一个表单被最小化,第二个表单也被最小化!所以我必须手动取消最小化第二种形式!

    private void button1_Click(object sender, EventArgs e)
    {
        if (DebugForm != null)
            return;

        DebugForm = new DebugForm();
        DebugForm.Closed += delegate
                                 {
                                     WindowState = FormWindowState.Normal;
                                     DebugForm = null;
                                 };

        WindowState = FormWindowState.Minimized;
        DebugForm.Show();
        DebugForm.WindowState = FormWindowState.Normal;
        DebugForm.BringToFront();
    }

【问题讨论】:

  • 我认为这可以使用internal 两种形式的方法来完成。如果我错了,请回复我。 (我在我的项目中做了同样的事情)

标签: c# .net winforms


【解决方案1】:

当屏幕上有另一个窗口时,它似乎会最小化两个窗口。最小化除您的应用程序之外的所有窗口。你会看到它有效。让它与其他窗口一起工作,如下所示:

改变这个:

WindowState = FormWindowState.Minimized;
DebugForm.Show();
DebugForm.WindowState = FormWindowState.Normal;
DebugForm.BringToFront();

到这里:

DebugForm.Show();
WindowState = FormWindowState.Minimized;

我删除的行并不是真正需要的。重要的是语句的顺序在最小化之前要与父窗体的 Z 顺序相协调。

【讨论】:

  • 按 Z 顺序,我指的是堆叠在屏幕上的窗口从前到后的顺序。在其他情况下,这意味着控件在其父级中的 Z 顺序。如果 DebugForm 是父窗体的子控件,您使用的 BringToFront 方法会起作用,但事实并非如此。
【解决方案2】:

遇到了类似的问题。问题是我试图回调的表单不是活动表单。这是我解决问题的方法。在我添加的当前 from2 的按钮上单击:

if (form1.ActiveForm == null)// Check to see if form is active
{
    form1 frm = (form1)Application.OpenForms["form1"];// find open form
    frm.WindowState = FormWindowState.Maximized;// Set state
    frm.ShowInTaskbar = true; //set to show in taskbar
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多