2014-06-16 61 views
-5

我打算在Winform應用程序中使用的NumericUpDown控件中實現以下行爲。在Winform應用程序中將NumericUpDown控件的行爲修改爲NumericCyclic控件

當我們點擊NumericUpDown控件的向下箭頭鍵時,控件的值會減小,並且在隨後的點擊中,它的值將繼續減小直到達到最小值。之後,值保持不變,以進一步點擊向下箭頭鍵。對於單擊NumericUpDown控件的向上箭頭鍵也是如此,即在達到最大值後該值保持不變,以便進一步點擊控件的向上箭頭。

我想實現以下行爲:

  1. 達到最大值後,如果用戶點擊向上箭頭鍵的值設置爲控件的最小值。

  2. 達到最小值後,如果用戶單擊向下箭頭鍵,將該值設置爲控件的最大值。

回答

3

這不是NumericUpDown控制良好的行爲,但如果你想所以, 你可以繼承NumericUpDown並覆蓋UpButton()DownButton()像這樣

public override void UpButton() 
    { 
     if (Value == Maximum) 
      Value = Minimum; 
     else 
      base.UpButton(); 
    } 

    public override void DownButton() 
    { 
     if (Value == Minimum) 
      Value = Maximum; 
     else 
      base.DownButton(); 
    } 

並使用該繼承的控件而不是NumericUpDown

2

如果您能抽出Tag你可以這樣做:

private void numericUpDown1_Click(object sender, EventArgs e) 
{ 
    decimal old = numericUpDown1.Value; 
    if (numericUpDown1.Tag != null) old = (decimal)numericUpDown1.Tag; 

    if (old == numericUpDown1.Value && old == numericUpDown1.Maximum) 
     numericUpDown1.Value = numericUpDown1.Minimum; 
    else if (old == numericUpDown1.Value && old == numericUpDown1.Minimum) 
     numericUpDown1.Value = numericUpDown1.Maximum; 

    numericUpDown1.Tag = numericUpDown1.Value; 
} 

(更新馬車老答案)

+0

此方法存在問題,當您爲最大值設置一個值並且控件顯示max-1值時,並且當您單擊向上箭頭時,它不會顯示最大值,而是會跳轉到最小值。同樣的最小值也..有沒有解決方案呢? –

+0

哎呀,很好!看到我的更新..! – TaW

相關問題