2010-12-02 66 views
1

我讀到Control.ParentChanged事件MSDN上 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.parentchanged(VS.71).aspx發生Control.ParentChanged事件時?

但我不明白的代碼示例:有一個在源代碼中出現的所有不ParentChanged?

private void currencyTextBox_TextChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     // Convert the text to a Double and determine if it is a negative number. 
     if(double.Parse(currencyTextBox.Text) < 0) 
     { 
     // If the number is negative, display it in Red. 
     currencyTextBox.ForeColor = Color.Red; 
     } 
     else 
     { 
     // If the number is not negative, display it in Black. 
     currencyTextBox.ForeColor = Color.Black; 
     } 
    } 
    catch 
    { 
     // If there is an error, display the text using the system colors. 
     currencyTextBox.ForeColor = SystemColors.ControlText; 
    } 
} 

所以我不明白什麼Control.ParentChanged事件是或沒有。

回答

0

會有另一塊別處代碼註冊該爲事件處理:

currencyTextBox.ParentChanged += new EventHandler(currencyTextBox_TextChanged); 

不過,我同意 - 方法名是誤導性的。

當您將此控件的父控件更改爲不同的父控件時,此事件處理程序將觸發。您可能需要閱讀raising and consuming events

4

呵呵,他們只是不能拿出一個很好的例子。而是通過展示一個通用的FooChanged事件處理程序來進行處理。是的,沒用。

自己實現一個ParentChanged事件處理程序是非常不尋常的。在Winforms內幕中這是一件大事,像BackColor,ForeColor,Font這樣的屬性是'環境'屬性。如果它們沒有被默認覆蓋,那麼它們將得到Parent的值。這當然意味着它是真的重要的是要注意到父母改變了。 winforms代碼已經處理它,你很少必須擔心它。除非你創建自己的環境屬性當然。