2012-08-23 41 views
0

如何引發將爲我的文本框控件調用OnTextChanged覆蓋方法的事件?在winforms文本框中引發OnTextChanged事件文本框

編輯:

private void thebox_TextChanged(object sender, FastColoredTextBoxNS.TextChangedEventArgs e) 
+1

爲什麼不直接調用'OnTextChanged'處理程序呢? – CodingGorilla

+1

通過運行解決方案並更改文本框中的文本! –

+0

我有一個自定義的TextBox,它有特殊的事件參數,我不想嘗試重新創建,我希望我可以提出事件並讓它自己完成。 @Amit Mittal,沒有狗屎? – AnotherUser

回答

1

只有這樣,才能提高從後面的代碼,事件是通過更改到TextBox的Text屬性。

http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx enter image description here

+1

你是對的,這在技術上是對這個問題的答案,但這是一個非常糟糕的主意。更新UI元素上的文本從來都不是一個好計劃,所以您可以激活與該文本無關的副作用。 –

2

當你發現需要嘗試直接調用的事件,它通常表明你正在嘗試的東西太多邏輯集成到您的活動方法或事件處理程序。調用OnTextChanged或直接調用事件處理函數並不是一個好主意。事件的設計是基於用戶交互觸發的,而不是在任何時候想要看到它們的副作用都被當作普通方法來調用。事實上,它應該是一個設計目標,從您的事件方法和所有事件處理程序中移除所有重要的副作用,並將它們移到單獨的方法中。

您的最佳選擇是採用當前在您的OnTextChanged方法中發生的邏輯,並將其置於另一個正確命名的方法中。方法名稱「OnTextChanged」意味着它不會做任何事情,除非通知您文本已更改。如果你需要做更多的工作,把它放在它自己的方法中(例如,UpdateRelatedControls,或任何可能的方法),並從你的OnTextChanged事件中調用這個新方法。然後,您可以公開公開這種新方法,並隨時調用它。

+0

OnTextChanged是我使用正則表達式來確定哪些字符要着色和不着色,以及放置代碼文件夾的位置。當我打開另一個表單時,用戶會更改代碼文件夾的位置和位置,但這不會更新當前文件夾,直到用戶更改文本。所以我想在用戶關閉摺疊標記表單後調用ontextchanged,以便他們立即看到更改。 – AnotherUser

+0

更改文本顏色和文件夾與文本更改沒有直接關係 - 這些都是副作用。我會創建一個UpdateColorsAndFolders方法並從OnTextChanged調用它。然後,也可以在用戶關閉其他表單時調用UpdateColorsAndFolders方法,以便他們看到其更改。這樣,當文本沒有改變時,您不必嘗試調用OnTextChanged。 –

1

textchanged事件中的逗號將數字格式化爲十進制格式。這裏是C代碼#

private void textBox8_TextChanged(object sender, EventArgs e) 

    { 

     //Remove previous formatting, or the decimal check will fail 

     string value = String.Format("{0:0,0.00}", double.Parse(textBox8.Text)); 
// "12,345.87" 


     decimal ul; 
     //Check we are indeed handling a number 
     if (decimal.TryParse(value, out ul)) 
     { 
      //Unsub the event so we don't enter a loop 
      textBox8.TextChanged -= textBox8_TextChanged; 
      //Format the text as currency 
      textBox8.Text = value.ToString(); 
      textBox8.TextChanged += textBox8_TextChanged; 
     } 

    }