c#winforms - 如何在父表单前面显示子表单而不使父表单不可见?

时间:2016-07-03 15:44:47

标签: c# .net winforms

此问题与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();
    }

然而,它不会在父母面前展示孩子。它显示了这一点,正如你所看到的,它显示了前面的父形式和后面的孩子,而不是我想要的另一种方式。

enter image description here

我已经阅读过使用childform.ShowDialog(),但我不想这样做,因为这会让父母在儿童表单显示时隐身。我希望两者都可见。

我已经读过BringToFront因为控件不是表格而无法工作,并且使用Activate,但正如您所看到的,我已经尝试过激活和它也没有工作。

5 个答案:

答案 0 :(得分:3)

Form.Show()方法有一个重载,该重载接受一个指定表单父级的参数。子表单始终显示在父表单上方。

skimage

答案 1 :(得分:3)

只需将操作移至已显示的事件即可。您可以删除BringToFront和Activiate。

<img>

这是因为调用Load事件时,表单仍然显示。

结果,您的序列变得不合时宜:

  1. 父负载&gt;致电儿童
  2. 儿童负荷
  3. 所示儿童
  4. 父母显示
  5. 因此,您的父母将在稍后出现,因此无论如何都是上层。

    通过使用Shown事件,问题得以解决。

    1. 父级加载
    2. 父母显示&gt;致电儿童
    3. 儿童负荷
    4. 所示儿童

答案 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