2010-04-15 75 views
0

是否有一種簡單的方式來跟蹤Mdi兒童的變化,即當他們被創建和關閉時,像事件OnMdiChildListChanged(我意識到這實際上並不存在)。Mdi兒童在.Net中改變

我也知道我可以在我的Mdi中有一個方法來處理子窗體的創建並記錄它們的狀態,甚至創建一個接口來定義子窗體具有一個「NotifyParent」方法,然後呼籲關閉的形式,但我想知道是否有任何內置的事件,我可以進入?

+0

@Jon,我不覺得這是一個好主意,說出我想解決什麼問題,因爲它應該不重要 - 這隻會鼓勵人們回答這個問題(我已經有了)。如果對我的問題有一個答案(可能是一個簡單的事件),它會解決許多問題。無論如何,謝謝你,但你的鏈接並沒有解決我的問題。謝謝。 – Ben 2010-04-15 13:46:07

回答

1

此管道已存在,它用於自動更新MDI窗口列表(MenuStrip.MdiWindowListItem屬性)。 Form類在OnVisibleChanged和OnMdiChildActivate方法中有代碼來更新菜單。儘管如此,你不能看到菜單項目列表的變化,你也不能重寫任何管道代碼。在您自己的子表單中執行類似和重載這些方法不是沒有辦法。

蓬特這個問題,簡單地寫在你的MDI父窗體的公共方法,你堅持使用添加新的子窗口:

public void AddChild(Form child) { 
    child.MdiParent = this; 
    child.FormClosed += child_FormClosed; 
    // Run your code to handle new child windows here... 
} 
private void child_FormClosed(object sender, FormClosedEventArgs e) { 
    // Your code to handle closed child windows here... 
} 

你甚至可以做的AddChild靜態的,因爲有永遠只能一個MDI父。

+0

感謝@Hans,我有一種感覺,我不得不寫上面的代碼。 – Ben 2010-04-15 14:55:29

0

您可以創建自己的事件,並自己在關聯的方法中激發它。這非常簡單,您可以像內置事件一樣訂閱它。

+0

嗨@SLC,是的,我也這麼想過。我知道有幾種方法可以自己做。我只是認爲它可能是.Net給你的東西,因爲它似乎相當有用。乾杯 – Ben 2010-04-15 13:33:20

0

當Mdi孩子被打開或關閉時,MdiChildActivate(或OnMdiChildActivate)將會觸發。