2015-05-04 12 views
-2

我的表單中有3個NumericUpDown元素。這些元素通過它們的總和進行同步。例如sum是9個元素值是3,3,3,增量是2.當用戶從第3個元素改變到第5個時,我們必須得到5,2,2。僅針對用戶交互的NumericUpDown事件

對於同步,我曾嘗試使用事件ValueChangedVisibleChanged,但它們在我們進行編程修改或用戶交互時正在工作。 我對每個元素都使用此方法,但對於此事件,此方法在結果值其他元素在代碼中發生更改時再次開始更改。

private void numericUpDown1Change(object sender, EventArgs e) 
    { 
     int oldValue = Sum - (int)numericUpDown2.Value - (int)numericUpDown3.Value; 
     int average; 
     if ((int)numericUpDown1.Value - oldValue > 0) 
     { 
      average = ((int)numericUpDown1.Value - oldValue)/2; 
      numericUpDown2.Value = numericUpDown2.Value - average; 
      numericUpDown3.Value = numericUpDown3.Value - average; 
     } 
     else 
     { 
      average = (oldValue - (int)numericUpDown1.Value)/2; 
      numericUpDown2.Value = numericUpDown2.Value + average; 
      numericUpDown3.Value = numericUpDown3.Value + average; 
     } 
    } 

我想使用事件,當用戶單擊向上或向下按鈕時,或者用戶輸入新值時,什麼工作。

我必須選擇什麼樣的事件呢?

+1

一些代碼和你的實際問題會有所幫助。 –

回答

2

使用ValueChanged事件,但保留一個標誌,告訴您更改是由代碼還是由用戶完成。

對於單個控件,您可以在類級別保留布爾變量(我可能將其稱爲IsValueChangedByCode)並將其設置爲false。在您的方法中,在您更改該值之前,將其設置爲true,之後再回到false。在事件處理程序內檢查該標誌是否爲truefalse,並決定是否要執行代碼。

對於3個控件而言,邏輯是相同的,但不是使用布爾標誌,而是需要2個不同的布爾值,或者可以使用整數或標誌枚舉。

相關問題