2011-03-12 13 views
6

我有一個Textbox控件,它有時以編程方式更新,也可以由用戶更新。 我如何區分這兩個事件? 我想在用戶更改文本時將「髒」標誌設置爲「真」。只有用戶輸入的c#textbox事件

+0

你是[數據綁定](http://msdn.microsoft.com/en-us/library/ms752347.aspx)? – 2011-03-12 00:21:13

+0

該控件沒有數據綁定... – kaycee 2011-03-12 00:30:42

回答

6

您可以使用文本框的鍵按下事件之前保存的價值。

 private void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     //Insert the code you want to run when the text changes here! 
    } 
+0

這個事件是有效的文本框,但我想知道其他控制像NumericUpDown怎麼樣... – kaycee 2011-03-12 00:26:25

+2

是的,這個解決方案不是所有控件的最乾淨。但是,numericupdown控件確實包含keydown事件和mousedown事件。我想你可以同時使用它們和追蹤控件的值。另外,每次編程改變值時,你總是可以拋出一個布爾標誌,然後檢查控件的ValueChanged事件中的布爾標誌(在繼續處理之前將其設置回默認值)。這當然是一個非常簡單的解決方案 - 可能不是最優雅的。 – 2011-03-12 13:39:54

+1

如果用戶用鼠標剪切並粘貼文本框中的數據,這不起作用。 – 2013-03-11 14:52:50

2

避免在編程完成時設置「髒」標誌。禁用事件處理程序或設置一個標誌,上面寫着「這是代碼,而不是用戶」

+0

在內聯更改的持續時間內禁用事件處理程序是一個好主意。它還解決了用戶將文本粘貼到框中時可能遇到的任何問題。 – 2016-06-22 08:46:38

0

嘗試的onblur

這會引起用戶離開現場的那一刻。

您可以解決它與聚焦狀態一起編輯

+0

好主意,但不是100%有效。會比我的回答「清潔」一點 – 2011-03-12 00:05:42

+0

如果它不起作用,那麼「清潔」就沒有意義。簡單地分離處理程序對於這種事情是非常標準的。 – 2011-03-12 00:12:01

+0

他不是在談論殘疾人處理程序,而是關於額外的標誌。那麼,它是一個額外的國旗或額外的處理程序... – 2011-03-12 00:15:44

5

我的解決方案 類型的工作,複製並粘貼在TextChanged事件的TextBox

private void TextChanged(object sender, EventArgs e) 
    { 
     if (((TextBox)sender).ContainsFocus) 
     { 

     } 
    } 
+3

如果控件具有焦點,但文本正在以編程方式更改,該怎麼辦? – Pedro 2011-09-24 17:22:23

+0

使用Textchnaged委託進行控制聯合並使用其他編程方式更改 – naderi 2011-09-24 18:41:44

2

檢查修改的屬性。如果爲true,則更改是由用戶進行的,否則以編程方式更改文本。