2011-02-28 76 views
0

我有一個文本框, 情況是,當用戶把它留空,確定按鈕被禁用。如果用戶輸入基於天數的持續時間值,則該按鈕被啓用。問題與文本框值的變化

問題是:比方說用戶點擊文本框,輸入:100,他意識到他犯了一個錯誤,他刪除了該值,並嘗試開始填充其他文本框,然後再回來,在當用戶點擊表單的其他部分時,此級別的值爲becoems 0 autoamtically並且Ok按鈕現在爲Enabled。

我該如何避免這種情況?

Private Sub txtMembershipDuration_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtMembershipDuration.TextChanged 
If txtMembershipDuration.Text = "" Then 
    btnOK.Enabled = False 
End If End Sub 

另外,我怎樣才能控制自動0?

+3

該值不會「自動」變爲0,除非您已經**寫** **將值設置爲0.因此,避免它的簡單方法是刪除該代碼。 – 2011-02-28 12:49:40

+0

哪裏/何時將值設置爲0? – 2011-02-28 13:02:58

+0

我看到你已經編輯了你的問題,再次詢問0,但問題不是缺乏清晰度。我明白這是你想解決的問題。但我需要你幫助我幫助你。 *以某種方式*,你已經寫了代碼,將0插入到文本框中。這是實現「自動」發生的唯一方法。在你的表單類中搜索'txtMembershipDuration.Text'的所有賦值,並顯示任何產生命中的代碼。 – 2011-02-28 13:28:49

回答

0

你可以檢查爲「0」,如果它不是一個有效的值

Private Sub txtMembershipDuration_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles txtMembershipDuration.TextChanged 
    If txtMembershipDuration.Text = "" OrElse 
     txtMembershipDuration.Text = "0" Then 
     btnOK.Enabled = False 
    End If 
End Sub 
+0

這只是一個骯髒的解決方法。我不會推薦這樣的解決方案...... – Jens 2011-02-28 12:53:17

+0

@J。 Vermeire:我不明白這有什麼「骯髒」的。它不會比我每次做一個'TryParse'都要遜色。它可能更高性能,以及。 – 2011-02-28 12:55:31

+1

由於TryParse也會捕獲其他錯誤輸入(如文本),上面的代碼不會。特別是新的程序員應該嘗試思考問題而不是採取簡單明瞭的解決方案。從長遠來看,這可能會讓他們受益。我錯了嗎? – Jens 2011-02-28 12:58:33

1

使用對您的支票TryParse,並確保它是不是檢查,如果它是「」大於0。 Link: TryParse

+0

TryParse是輸入驗證的好建議,另外檢查無效數字也是一個好主意。 – 2011-02-28 13:05:04

+0

那個Val怎麼樣?我真的不認爲這是價值鑄造的安全方式。是嗎? – 2011-02-28 13:44:25

+0

這很安全。這不是一個解析,它是TryParse。也許你在混淆它們。如果轉換成功,TryParse將返回一個布爾值,實際值將返回一個out參數。 – Jens 2011-02-28 13:57:23