此问题与Win Form in front of parent form
不重复因为那个人的作者似乎并不介意隐藏父表格,并且表明ShowDialog()的答案会隐藏父表格。我不想隐藏父表单。
我在form_load中有以下代码
private void Form1_Load(object sender, EventArgs e)
{
var childform = new Form();
childform.Show();
childform.BringToFront();
childform.Activate();
}
然而,它不会在父母面前展示孩子。它显示了这一点,正如你所看到的,它显示了前面的父形式和后面的孩子,而不是我想要的另一种方式。
我已经阅读过使用childform.ShowDialog()
,但我不想这样做,因为这会让父母在儿童表单显示时隐身。我希望两者都可见。
我已经读过BringToFront因为控件不是表格而无法工作,并且使用Activate,但正如您所看到的,我已经尝试过激活和它也没有工作。
答案 0 :(得分:3)
Form.Show()方法有一个重载,该重载接受一个指定表单父级的参数。子表单始终显示在父表单上方。
skimage
答案 1 :(得分:3)
只需将操作移至已显示的事件即可。您可以删除BringToFront和Activiate。
<img>
这是因为调用Load事件时,表单仍然显示。
结果,您的序列变得不合时宜:
因此,您的父母将在稍后出现,因此无论如何都是上层。
通过使用Shown事件,问题得以解决。
答案 2 :(得分:2)
在表单Shown
事件中尝试使用您的代码。这样,第二种形式显示在主形式之后,因此应该变为活动状态。
答案 3 :(得分:1)
只需将this
作为参数包含在Show
方法中。
var childform = new Form();
childform.Show(this);
答案 4 :(得分:0)
在InitializeComponent()之后尝试这个:
this.Activated += (s, e) => ((Form)s).SendToBack();
其中“this”是父表单,所以我将“s”转换为Form