2014-10-09 72 views
0

我有一個TextBox控件。我已經把我的KeyPress事件的文本框,使用戶只允許輸入數字:防止用戶輸入零,但允許包含零的其他數字

private void txtbxRecurEveryXWeeks_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)) 
    { 
     e.Handled = true; 
    } 
} 

但除此之外,我不希望用戶設置TexBot的值爲零「0」 。但他們仍應該被允許輸入「10」或「3400」作爲價值。我怎樣才能做到這一點?

回答

2

可能最好忽略按鍵事件並處理丟失的焦點事件,並檢查用戶輸入完成時的值是否爲0

編輯:有人指出,用戶可以鍵入「000」並失去焦點,這將導致失敗。您可以檢查和確認文本框中有一個值,並解析它作爲一個int,以確認它是不是0

private void txtbxRecurEveryXWeeks_LostFocus(object sender, EventArgs e) 
{ 
    int value; 
    if(!string.IsNullOrWhitespace(txtbxRecurEveryXWeeks.Text) 
     && int.TryParse(txtbxRecurEveryXWeeks.Text, out value) 
     && value > 0) 
    { 
     //Do something like clear the textbox value 
    } 
} 
+0

同意最後一點。我會做一個失去的焦點,或投訴提交 – 2014-10-09 15:26:08

+0

是的,我已經添加它提交了,但在此之前,我也應該防止進入零,因爲然後我有一個表格上的另一個標籤,會說「每0周」哪沒有道理。我goona嘗試你的解決方案,如果它的工作,你將有正確的答案。 – Disasterkid 2014-10-09 15:28:37

+0

在第一個代碼片段中,「Text」屬性在那一點不會是「0」(它報告前一個值)。第二種方法應該可行,儘管您可能想要解析該值(因爲您知道它只能是數字),以便在離開TextBox之前處理鍵入「000」的情況。 – 2014-10-09 15:30:50

0

在您使用,可以考慮使用NumericUpDown控制輸入數字的假設。它具有Minimum屬性,您可以將其設置爲1以避免零輸入。

0

使用NumericUpDown,最小值= 1並隱藏向上和向下按鈕。

numericUpDown1.Minimum = 1; 
    numericUpDown1.Controls[0].Hide(); 
相關問題