C# MDI父窗体中的标签不保留在子窗体的背景中?

C# MDI父窗体中的标签不保留在子窗体的背景中?,c#,.net,winforms,C#,.net,Winforms,请引导和帮助我 我有一个MDI父窗体,它的中心有一个标签(用于在中心显示应用程序名称)。在此MDI父窗体中打开窗体时,此标签应显示在新打开窗体的背面,但在显示子窗体时,标签显示在新打开窗体的前面(看起来好像新打开的窗体位于标签和MDI父窗体之间) 如何管理它请指导我 谢谢这将在您有活动MDI子项时隐藏标签,当不再有活动子项时再次显示标签 private void Form1_MdiChildActivate(object sender, EventArgs e) {

请引导和帮助我

我有一个MDI父窗体,它的中心有一个标签(用于在中心显示应用程序名称)。在此MDI父窗体中打开窗体时,此标签应显示在新打开窗体的背面,但在显示子窗体时,标签显示在新打开窗体的前面(看起来好像新打开的窗体位于标签和MDI父窗体之间)

如何管理它请指导我


谢谢

这将在您有活动MDI子项时隐藏标签,当不再有活动子项时再次显示标签

    private void Form1_MdiChildActivate(object sender, EventArgs e)
    {
        if (ActiveMdiChild != null)
            label1.SendToBack();
        else
            label1.BringToFront();
    }

我希望这会有所帮助。

这将在您有活动MDI子项时隐藏标签,并在不再有活动子项时再次显示标签

    private void Form1_MdiChildActivate(object sender, EventArgs e)
    {
        if (ActiveMdiChild != null)
            label1.SendToBack();
        else
            label1.BringToFront();
    }

我希望这会有所帮助。

问题在于您的标签没有添加到
Mdi客户端(即灰色Mdi容器),而是添加到表单中

但不幸的是,恕我直言,向MDI客户端添加控件是不可能的

唯一的方法是在MdiClient的
Paint
事件上绘制所需内容,如本文所建议:


问题在于,您的标签没有添加到
Mdi客户端(即灰色Mdi容器),而是添加到表单中

但不幸的是,恕我直言,向MDI客户端添加控件是不可能的

唯一的方法是在MdiClient的
Paint
事件上绘制所需内容,如本文所建议:


好吧,我做了一个技巧,它对我很有效。我们通常在中心写一个应用程序名,并期望它显示给用户。这里的许多人说,MdiParent只适用于表单,而不适用于其他工具,比如我们不能在MdiChild表单后面隐藏标签/面板

因此,我所做的是在一个
新表单中写下所有内容,如应用程序名、联系人、电子邮件等,比如说
frmMdiBody
,设置其
formBorderStyle=None
,并设置所需的表单长度,
StartPosition=CenterScreen
计时器。勾选
,我写了以下内容:(在加载事件中不适用于我)

上面的代码还检查是否有一个表单处于打开状态,以便在我们写入Timer.Tick事件时,它不会一次又一次地打开多个
frmMdiBody


如果我错了,有人可以纠正我。如果看起来有吸引力的话,我也会做更改。

好吧,我做了一个技巧,它对我很有效。我们通常在中间写一个应用程序名,希望它能显示给用户。这里的许多人说,MdiParent只用于表单,不用于其他工具,比如我们不能在MdiChild后面隐藏标签/面板形式

因此,我所做的是在一个
新表单中写下所有内容,如应用程序名、联系人、电子邮件等,比如说
frmMdiBody
,设置其
formBorderStyle=None
,并设置所需的表单长度,
StartPosition=CenterScreen
计时器。勾选
,我写了以下内容:(在加载事件中不适用于我)

上面的代码还检查是否有一个表单处于打开状态,以便在我们写入Timer.Tick事件时,它不会一次又一次地打开多个
frmMdiBody


如果我错了,有人可以纠正我。如果看起来有吸引力,我也会做更改。

谢谢你回复dibEmALL,事实上我是winforms的新手。我正在引用的标签是我在Mdi parent上添加的(我添加了一个简单表单并使其成为其他表单的Mdi parent,我没有添加单独的Mdi parent类型的表单)。如果我不打开,新表单标签将显示在MDI父级上。感谢您回复DibeMail,实际上我是winforms的新手。我正在引用的标签是在MDI父级上添加的(我添加了一个简单表单并使其成为其他表单的MDI父级,我没有添加单独的MDI父级表单类型)。如果我不打开新表单,MDI父项上会出现标签。感谢jvanrhyn的回复。在什么情况下,我应该对什么表单进行编码?请再指导一件事。这是正确的行为还是我有问题。感谢这是MDI表单的MdiChildActivate事件。在激活和停用子项时都会触发此事件。jvanrhyn我尝试了这段代码。它部分地解决了问题。在将子表单标签加载到后表单(mdi父表单)时不可见,当我关闭子窗体标签时,标签会回来。但它再次给人一种奇怪的感觉,像标签的来来往往。难道没有一些为什么标签会留在子窗体的背面始终可见,如果没有子窗体将被打开,标签将是第一层。当子窗体出现时,标签会在我关闭c时消失hild form再次出现。请提供建议。ThanksI发布了另一个解决方案,该解决方案将文本绘制到MDI表面。因此,您不会使用标签。在windows上工作正常,但在Linux中通过MDI上的mono控件使用时,单击子窗体就会消失,请帮助我感谢jvanrhyn的答复。在什么情况下使用什么窗体我应该对此进行编码?请再指导一件事。这是正确的行为还是我出了问题。谢谢这是MDI表单的MdiChildActivate事件。激活和停用子表单时都会触发此事件。jvanrhyn我尝试了此代码。它部分解决了问题。在将子表单标签加载回表单(MDI父表单)时不可见,当我关闭子窗体标签时,标签会回来。但它再次给人一种奇怪的感觉,像标签的来来往往。难道没有一些为什么标签会留在子窗体的背面始终可见,如果没有子窗体将被打开,标签将是第一层。当子窗体出现时,标签会在我关闭c时消失hild form再次出现。请提供建议。ThanksI发布了另一个解决方案,可以将文本绘制到MDI表面。因此,您不会使用标签。在windows上工作正常,但在Linux中通过MDI上的mono控件使用它时,单击子窗体就会消失,请帮助我。谢谢Jvanrhyn,它解决了这个问题。只有一个问题我的问题很正常?我是说
  Dim NewMDIChild As frmMdiBody = MdiChildren.OfType(Of frmMdiBody)().SingleOrDefault
  If NewMDIChild Is Nothing Then
      NewMDIChild = New frmMdiBody
      NewMDIChild.MdiParent = Me
      NewMDIChild.Show()
  End If