我有自定義的MDI父窗體和自定義的子窗體,並且我想在mdi子窗體最大化時在它自己的文本+ mdi子窗體的文本上設置標題。那麼怎麼可能? MDI子如何結合MDI標題欄上的自定義MDI文本和自定義MDI子文本?
正常狀態的形式,它是正常工作。
在此圖像中可以看到形式的狀態是最大化,但MDI子的文字不與MDI父窗體的文本顯示。
我有自定義的MDI父窗體和自定義的子窗體,並且我想在mdi子窗體最大化時在它自己的文本+ mdi子窗體的文本上設置標題。那麼怎麼可能? MDI子如何結合MDI標題欄上的自定義MDI文本和自定義MDI子文本?
正常狀態的形式,它是正常工作。
在此圖像中可以看到形式的狀態是最大化,但MDI子的文字不與MDI父窗體的文本顯示。
嘗試窗體的Size_Changed
事件,(Form1
是MDI父,TestForm
(FRM)是MDI子)
TestForm frm;
private void Form1_Load(object sender, EventArgs e)
{
frm = new TestForm();
frm.MdiParent = this;
frm.SizeChanged += Frm_SizeChanged;
frm.Show();
}
private void Frm_SizeChanged(object sender, EventArgs e)
{
if (frm.WindowState == FormWindowState.Maximized) { // checks Form's Window state and return true if it is maximized (mdi child's event btw)
this.Text = this.Text + " " + frm.Text; // do what ever do you want in here
}
}
希望幫助,
當你最大化的MDI子,MDI容器的文本將顯示爲:
ParentText - [ChildText]
所以根據您的修改,我想你有一個CustomText
屬性象下面這樣:
private string CustomText
{
get { return toolStripLabel1.Text; }
set { toolStripLabel1.Text = value; }
}
其中顯示了一個自定義標題欄的形式。然後,如果你有它的作用就像形式的標準標題欄,你可以處理Activated
和MDI子窗體SizeChanged
事件,並使用BeginInvoke
這樣設置CustomText
:
private void button1_Click(object sender, EventArgs e)
{
var f = new Form2() { Text = "Form2" };
f.MdiParent = this;
f.Activated += new EventHandler(f_Activated);
f.SizeChanged += new EventHandler(f_SizeChanged);
f.Show();
}
void f_SizeChanged(object sender, EventArgs e)
{
this.BeginInvoke(new Action(() => { CustomText = this.Text; }));
}
void f_Activated(object sender, EventArgs e)
{
this.BeginInvoke(new Action(() => { CustomText = this.Text; }));
}
注意
MdiChildActivate
對於檢測MDI孩子何時打開或關閉很有用。ActiveMdiChild
property顯示活動的MDI子項。
這是對的WinForms? – auburg
是的,這是winforms – Hardik
它已經在以這種方式工作?不需要做任何額外的事情。 – Berkay