2016-09-28 43 views
0

我有自定義的MDI父窗體和自定義的子窗體,並且我想在mdi子窗體最大化時在它自己的文本+ mdi子窗體的文本上設置標題。那麼怎麼可能? MDI子如何結合MDI標題欄上的自定義MDI文本和自定義MDI子文本?

enter image description here

正常狀態的形式,它是正常工作。

enter image description here

在此圖像中可以看到形式的狀態是最大化,但MDI子的文字不與MDI父窗體的文本顯示。

+0

這是對的WinForms? – auburg

+0

是的,這是winforms – Hardik

+0

它已經在以這種方式工作?不需要做任何額外的事情。 – Berkay

回答

0

嘗試窗體的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 
    } 
} 

希望幫助,

+0

感謝Berkay你的代碼是工作的,但問題是隻有frm_sizechanged事件(子表單處於活動狀態)一次,但我想在mdi子表單最大化時調用該事件。 – Hardik

+0

你一次說什麼?它跟蹤尺寸的變化和條件是否最大化。 @Hardik – Berkay

+0

是的,這是工作謝謝。我在代碼中犯了一些錯誤。再次感謝。 – Hardik

1

當你最大化的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; })); 
} 

注意

+0

感謝Reza Aghaei,這段代碼適合我,但我希望在mdi子窗體最大化時更改文本。 – Hardik

+0

默認情況下,子項的文本+文本將以最大化狀態顯示。 –

+0

此操作正在執行自定義MDI窗體並自定義MDI子窗體。我提到了這個問題。 – Hardik