我有一个.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;
}
}
}
}
现在按预期工作。
答案 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
方法。