2011-08-18 30 views
3

我有以下方法:C#對象發件人 - 獲取方法從它被稱爲

private void button_Click(object sender, EventArgs e) 
    { 
      //Changes the Text in the RichBox, EXAMPLE: 
      richtTextBox.Text = "Now Changed and calling Method richTextBox_TextChanged"; 
    } 

而且,

private void richTextBox_TextChanged(object sender, EventArgs e) 
{ 
     //Wants something like that 
     if(called from button_click) 
     { 
      //DO SOMETHING 
     } 
     else 
     { 
      //DO SOMETHING 
     } 
} 

我怎樣才能解決這個問題,要知道,如果它被稱爲從Button_click? 我是否必須使用對象發件人來獲取信息?但是如何?

希望能跟大家能幫助我

+1

的第一件事進入腦海的是,你可以有某種指標或標誌將被設置一次button_Click被調用,您可以檢查標誌richTextBox_TextChanged和復位。但我相信這是直接的解決方案,對於桌面應用程序開發人員所知的這種情況,必須有更好的解決方案。 – Incognito

回答

4

只需使用一個標誌:

private bool _isInButtonClick; 

private void button_Click(object sender, EventArgs e) 
{ 
     try 
     { 
      _isInButtonClick = true; 
      //Changes the Text in the RichBox, EXAMPLE: 
      richtTextBox.Text = "Now Changed and calling Method richTextBox_TextChanged"; 
     } 
     finally 
     { 
      _isInButtonClick = false; 
     } 
} 


private void richTextBox_TextChanged(object sender, EventArgs e) 
{ 
     if(_isInButtonClick) 
     { 
      //DO SOMETHING 
     } 
     else 
     { 
      //DO SOMETHING 
     } 
} 
+0

在finally塊中重置'_isInButtonClick'看起來會出現問題,因爲它可以在'richTextBox_TextChanged'中'if'塊之前執行,所以我認爲最好重置「richTextBox_TextChanged」中的值。 – Incognito

+0

因此,這是不工作,他從來沒有走進:if(_isInButtonClick) { // DO SOMETHING } – eMi

+1

@eMi是的...最好重置該標誌在richTextBox_TextChanged,你會得到你想要的結果。 – Incognito

2
private void richTextBox_TextChanged(object sender, EventArgs e) 

這裏sender是RichTextBox的,而不是改變文本的按鈕。

你可以進入棧跟蹤來發現按鈕點擊是否在調用堆棧上,但這是過度殺傷(就像使用nuke破解核桃)。

在窗體中添加一個標誌(bool),並在按鈕單擊中將其設置爲true,然後在TextChanged事件中檢查它,然後在按鈕單擊結束時再次將其設置爲false。

如果你這樣做,我會建議在實現IDispose的類中包裝這個signal邏輯並在using語句中使用它。

這就是說,你確定你需要這個功能嗎?

+0

聽起來很複雜^^我認爲有可能對發件人做些什麼.. – eMi