2013-12-11 59 views
1

我有一個應用程序在WinForms中,我有很多控件。這些控件代表應用程序的設置,用戶可以通過單擊按鈕保存此設置。NumericUpDown無效值

我試圖解決一個問題的NumericUpDown(我將其稱爲NUM)控制:讓我們說,民具有以下屬性:

最低:10 最大:60 步驟:1

如果用戶想要更改值,有兩種方法可以實現這一點:單擊箭頭(Num的右側)或手動將值直接輸入到Num。第一種方法是好的,但大多數用戶使用第二種方式,並且存在一些小問題。

如果用戶在示例1的時間間隔外鍵入某個值,則表示確定,因爲他可以繼續使用5鍵入,因此最終值爲51,這在間隔內。但是,如果他在值1之後停止鍵入,這意味着他鍵入的值超出了區間(1)。如果他在Num之外的地方點擊,則值(不在間隔內)會自動更改爲最接近的允許值(如果是1,則值將更改爲10)。

但他可能不會注意到這種自動變化,所以我想以某種方式處理它,並通知他,他將無效的價值。但是這種情況並不是由任何Num事件來處理的(如果我試圖讀取ValueChanged事件中的值,它會自動讀取已更改的值,而不是無效的值),但無法找到他放在那裏的無效值。

我知道我可以添加TextChanged事件,但有一個問題,如果他輸入一些無效值(5),它可以改爲有效值(通過加1使得它爲15)。

你有什麼想法如何解決這個問題?我知道這很愚蠢,但這不取決於我,我必須這樣做,我不知道如何。

回答

0

所以這是我的解決方案:

我處理TextChanged事件,這個方法裏面我給你texttag

Private Sub NUDTextChanged() 
    Integer.TryParse(NUD.Text, NUD.Tag) 
End Sub 

然後:

Private Sub NUD_LostFocus() Handles NUD.LostFocus 
    If NUD.Tag < NUD.Minimum Or NUD.Tag > NUD.Maximum Then 
     ' show message 
    End If 
End Sub 

處理Validating事件因爲在驗證之前自動更改爲允許的值並且此自動更改觸發TextChange事件,所以經過驗證,我有新的價值,而不是無效的。

LostFocus在自動更改之前,所以我可以很容易地控制該值是否有效。

1

使用Lost Focus,而不是在設計階段設置最小值,並使用If語句進行檢查。

Private Sub Num_LostFocus(sender As Object, e As System.EventArgs) Handles Num.LostFocus 
    If Num.Value < 10 Then MsgBox("Number is incorrect") 
End Sub 

或者你也許可以創建自定義的控制,你可以覆蓋的值變化最小的,但我從來沒有嘗試過的事件。

+0

但是如果用戶想要用箭頭設置該值會怎麼樣?如果沒有設置最小和最大值,他可以很容易地通過這個箭頭去無效的值... – DanielH

+0

使用Num.ValueChanged值保持在限制範圍內。 – OSKM