2012-04-18 91 views
2

對於我的程序,輸入員工信息 - 如身份證,姓名,年薪和年薪。我製作了ID和工資箱numericupdown,但是我想讓工資箱成爲只需要數字的文本框。僅允許輸入數字而不是在C#中輸入NumericUpDown的文本框

但是,當我嘗試從numericupdown更改爲文本框時發生錯誤,說「不能隱式地將字符串轉換爲」十進制「。我也有另一個按鈕,發現最低工資等,但是什麼問題?我想創建例外,使文本框只需要數字,但它不會讓我:/

+0

WPF?的WinForms?的WebForms?其他一些形式? – Oded 2012-04-18 15:10:40

回答

4

當我試圖改變從的NumericUpDown到文本框時出現錯誤,說:「不能隱式轉換‘字符串’到‘小數’。

這在我看來就像一個錯誤鑄造

employee.EmployeeId = (int)idNumericUpDown.Value; 

試試這個:

employee.EmployeeId = decimal.Parse(idNumericUpDown.Value); 

而且也看看TryParse,這是更清潔。

+0

當我這樣做時,它不喜歡「價值」部分?總是這樣做 – user1336868 2012-04-18 15:15:40

+0

將.Value更改爲.Text。 – DoctorMick 2012-04-18 15:19:39

+0

非常感謝你! – user1336868 2012-04-18 15:23:03

9

如何在C#創建一個數字文本框
http://msdn.microsoft.com/en-us/library/ms229644(v=vs.90).aspx

最簡單的形式:

protected override void OnKeyPress(KeyPressEventArgs e) 
{ 
    if (!Char.IsDigit(e.KeyChar)) 
    { 
     e.Handled = true; 
    } 
} 

此代碼只是吞下任何不是數字的按鍵。 MSDN的鏈接解釋如何然而,處理事情像小數點等

+0

這太棒了,謝謝! – user1336868 2012-04-18 15:26:33

+0

你還能夠在這樣的TextBox上使用複製/粘貼嗎? – comecme 2012-04-18 16:04:54

+0

@comecme:這是一個很好的問題。顧名思義,「OnKeyPress」只驗證擊鍵。 – 2012-04-18 16:09:13

1

這是我總是爲我的文本框做的事情。

功能(允許所有數值和退格鍵):

private bool NumericOnly(char e) 
     { 
      return (e > (char)47 & e < (char)58) | e == (char)8; 
     } 

和onkeypress事件文本框的事件:

if (!NumericOnly(e.KeyChar)) e.Handled = true; 
1

這裏是一個破解我發現。您可以隱藏的NumericUpDown的箭頭控制是這樣的:

private void RemoveArrows(NumericUpDown numericUpDown) 
{ 
    Control updown = numericUpDown.Controls[0]; 
    updown.Left += updown.Width; 
    updown.Visible = false; 
} 

只需調用此方法爲您的NumericUpDown控件(例如,在Form_Load事件處理程序):

private void Form2_Load(object sender, EventArgs e) 
{ 
    RemoveArrows(idNumericUpDown); 
    RemoveArrows(salaryNumericUpDown); 
} 

其他方式 - create numeric text box,或使用解析和驗證:

  1. 將工具箱中的組件拖動到您的窗體中。
  2. CausesValidation屬性設置爲true用於文本框(默認情況下爲true)。
  3. 創建NumericTextBox_Validating事件處理程序並將其預訂給所有應該包含十進制值的文本框。

如果不能從文本框中的文本分析十進制值,則會在文本框附近顯示錯誤標誌,並顯示消息「僅允許數字值」。

private void NumericTextBox_Validating(object sender, CancelEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 
    decimal value; 
    if (Decimal.TryParse(textBox.Text, out value)) 
    { 
     errorProvider1.SetError(textBox, ""); 
     return; 
    } 

    e.Cancel = true; 
    errorProvider1.SetError(textBox, "Only numeric values allowed"); 
} 

建議 - 使用的NumericUpDown控件用於輸入數字,因爲它說用戶「看到這個箭頭我在這裏只輸入數字?!」。而文本框沒有提到它接受的文本格式。

1

您可以創建一個「蒙面」文本框,該文本框只允許在添加到現有文本時匹配正則表達式的字符。

它的短:

首先,制定一個正則表達式是你的「編輯掩碼」。對於數字,它可以像^\d*$(任意長度的整數)一樣簡單,也可以與^(\d{1,3}(,?\d\d\d)*(.\d{1,})?)?$(帶可選逗號和可選小數部分的數字)一樣複雜。將其分配給派生自TextBox的新控件的公共屬性。

然後,覆蓋的OnKeyPress在派生文本看起來是這樣的:

protected override void OnKeyPress(KeyPressEventArgs e) 
{ 
    if (!Regex.Match(new StringBuilder(Text).Append(e.KeyChar).ToString(), MaskPattern)) 
    { 
     e.Handled = true; 
    } 
    else 
     base.OnKeyPress(e); 
} 

就像羅伯特·哈維的回答,這種方法將「吞」按任何鍵,當附加到當前文本值該文本框與正則表達式不匹配。您可以使用此MaskedTextBox不僅用於數字條目,而且用於僅需要純數字值,僅包含字母數字(無符號或空白),有效本地或網絡路徑,IP地址等的文本框。

相關問題