请指导和帮助我。
我有一个MDI父表单,其中间有一个标签(以中心显示应用程序名称)。在此MDI父级中打开表单时,此标签应出现在新打开的表单的背面,但在显示子表单时,标签出现在新打开的表单的前面(看起来像新打开的表单在标签和MDI父级之间)。
如何管理它请指导我。
感谢
答案 0 :(得分:4)
当您有活动的MDI时,这将隐藏标签。一旦没有活动的孩子,孩子就会再次显示它。
private void Form1_MdiChildActivate(object sender, EventArgs e)
{
if (ActiveMdiChild != null)
label1.SendToBack();
else
label1.BringToFront();
}
我希望这会有所帮助。
答案 1 :(得分:3)
public partial class MyMdiForm : Form
{
public MyMdiForm()
{
InitializeComponent();
foreach (Control control in Controls)
{
if (control is MdiClient)
control.Paint += mdiBackgroundPaint;
}
}
private void mdiBackgroundPaint(object sender, PaintEventArgs e)
{
var mdi = sender as MdiClient;
if (mdi == null) return;
e.Graphics.Clip = new System.Drawing.Region(mdi.ClientRectangle);
e.Graphics.DrawString("*** YOUR NAME HERE ***",this.Font,Brushes.Red,100F,100F);
}
}
答案 2 :(得分:2)
问题是您的标签未添加到MdiClient
(即灰色Mdi容器),而是添加到表单中。
但不幸的是,AFAIK,无法向MdiClient添加控件。
唯一的方法是在MdiClient的Paint
事件中绘制您想要的内容,如本文所示:
http://www.vbaccelerator.com/home/NET/Code/Libraries/Windows/MDI_Client_Area_Painting/article.asp
答案 3 :(得分:0)
嗯,显然MDI父窗口的子控件的Z顺序有问题。 (父母的子控件包括您的标签以及任何MDI文档窗口。)
您尚未显示任何代码,因此我无法发布特定解决方案。或许可以查看SendToBack
method:您可以尝试致电:
yourBackgroundLabel.SendToBack();
当您打开新的MDI(子/文档)窗口时。
答案 4 :(得分:0)
好吧,我做了一个把戏,对我有用。我们通常在中间写一个应用程序名称,并希望它显示给用户。许多人说,MdiParent仅适用于Forms,而不适用于其他工具,例如我们不能将标签/面板隐藏在MdiChild表单后面。
所以我要做的是用new Form
说frmMdiBody
写下所有内容,例如应用程序名称,联系人,电子邮件等,设置其formBorderStyle = None
并设置所需的长度。表单StartPosition = CenterScreen
和Timer.Tick
中,我写了以下内容:(在Load事件中对我不起作用)
Dim NewMDIChild As frmMdiBody = MdiChildren.OfType(Of frmMdiBody)().SingleOrDefault
If NewMDIChild Is Nothing Then
NewMDIChild = New frmMdiBody
NewMDIChild.MdiParent = Me
NewMDIChild.Show()
End If
上面的代码还检查是否打开了一个表单,以免在我们编写Timer.Tick事件时一次又一次打开很多frmMdiBody
如果我错了,有人可以纠正我。如果看起来很吸引人,我也会做更改。