如何让.NET 4应用程序的主要形式出现在前面?

时间:2011-03-14 18:04:02

标签: c# winforms .net-4.0

我有一个.NET 4 WinForm应用程序。我在主窗体上有一个打开子窗体的按钮。儿童表格有焦点。当子窗体打开时,如果我单击主窗体,主窗体将获得焦点,但子窗体仍保留在主窗体的顶部。

即使子表单已打开,如何使主表单出现在前面?

以下是两种表单的示例代码:

using System;
using System.Windows.Forms;

namespace WinTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var form = new Form2();

            form.Show(this);
        }
    }
}

using System.Windows.Forms;

namespace WinTest
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    }
}

根据Kumar在下面的回答,我更新了我的主要表格如下:

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WinTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            _FormList = new List<Form>();
        }

        private List<Form> _FormList;

        private void button1_Click(object sender, EventArgs e)
        {
            var form = new Form2();
            form.FormClosed += Form_FormClosed;
            _FormList.Add(form);
            form.Show();
        }

        private void Form_FormClosed(object sender, FormClosedEventArgs e)
        {
            _FormList.Remove((Form)sender);
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            foreach (var form in _FormList)
            {
                form.Visible = WindowState != FormWindowState.Minimized;
            }
        }
    }
}

现在按预期工作。

3 个答案:

答案 0 :(得分:7)

这样做

form.Show(); 

而不是

form.Show(this); 

参数设置要显示的表单的父级。父母表格将以他的子形式出现。

答案 1 :(得分:1)

如下所示

Form frm = null
private void button1_Click(object sender, EventArgs e)
        {
            frm = new Form2();
            frm.Show();
        }

// Minimize issue is handled
    private void Form1_Resize(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    frm.WindowState = this.WindowState;
                }
            }

答案 2 :(得分:0)

尝试删除“this”,然后将null传递给Show方法。