[英]label in MDI parent form do not remain in background of child form?
請指導並幫助我。
我有一個MDI父窗體,該窗體的中心有一個標簽(以在中心顯示應用程序名稱)。 在此MDI父級中打開表單時,此標簽應顯示在新打開的表單的背面,但在顯示子表單時,標簽將出現在新打開的表單的前面(看起來像新打開的表單位於標簽和MDI父級之間)。
如何管理,請指導我。
謝謝
當您有活躍的MDI子級時,這將隱藏該標簽。一旦不再有活躍的子級,則再次顯示該標簽。
private void Form1_MdiChildActivate(object sender, EventArgs e)
{
if (ActiveMdiChild != null)
label1.SendToBack();
else
label1.BringToFront();
}
我希望這有幫助。
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);
}
}
問題是您的標簽沒有添加到MdiClient
(即灰色Mdi容器),而是添加到了表單。
但不幸的是,對於AFAIK,無法向MdiClient添加控件。
唯一的方法是在MdiClient的Paint
事件上繪制所需的內容,如本文所建議:
http://www.vbaccelerator.com/home/NET/Code/Libraries/Windows/MDI_Client_Area_Painting/article.asp
好吧,您的MDI父窗口的子控件的Z順序顯然有問題。 (父級的子級控件包括您的標簽以及任何MDI文檔窗口。)
您尚未顯示任何代碼,因此我無法發布特定的解決方案。 也許看看SendToBack
方法 :您可以嘗試調用:
yourBackgroundLabel.SendToBack();
當您打開新的MDI(子/文檔)窗口時。
好吧,我做了一個把戲,對我有用。 我們通常在中間寫一個應用程序名稱,並希望它顯示給用戶。 許多人說,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
如果我錯了,有人可以糾正我。 如果看起來很吸引人,我也會做更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.