在 Windows Forms 應用程式中,NumericUpDown 控件常用於輸入整數範圍。有時業務需求要求在範圍內跳過某個特定數值,例如:允許輸入 1 到 5,但不可出現 4。當使用者按向上鍵從 3 遞增時直接跳到 5,按向下鍵從 5 遞減時直接跳到 3,而 1、2、3 則正常遞增遞減。
最簡單的做法是處理 ValueChanged 事件,在事件中判斷當前值是否為需跳過的數值,若是則立即將其設定為下一個允許的值。
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
// 假設要跳過 4
if (numericUpDown1.Value == 4)
{
// 判斷使用者是向上還是向下操作,這裡簡單示範:若大於 4 則設為 5,否則設為 3
// 實際專案中可透過記錄前一次值來精確判斷方向
numericUpDown1.Value = 5; // 或 3
}
}
HashSet<decimal> 存放禁止值,在事件中迴圈檢查並調整。NumericUpDown 控件並在 CoerceValueCallback 中實現邏輯,更符合 MVVM 模式。透過 ValueChanged 事件攔截並修正值,即可輕鬆實現 NumericUpDown 跳過特定數值的需求。這種方式無需繼承控件,程式碼量少、維護方便,適合大多數 WinForms 專案。