對於我的程序,輸入員工信息 - 如身份證,姓名,年薪和年薪。我製作了ID和工資箱numericupdown,但是我想讓工資箱成爲只需要數字的文本框。僅允許輸入數字而不是在C#中輸入NumericUpDown的文本框
但是,當我嘗試從numericupdown更改爲文本框時發生錯誤,說「不能隱式地將字符串轉換爲」十進制「。我也有另一個按鈕,發現最低工資等,但是什麼問題?我想創建例外,使文本框只需要數字,但它不會讓我:/
對於我的程序,輸入員工信息 - 如身份證,姓名,年薪和年薪。我製作了ID和工資箱numericupdown,但是我想讓工資箱成爲只需要數字的文本框。僅允許輸入數字而不是在C#中輸入NumericUpDown的文本框
但是,當我嘗試從numericupdown更改爲文本框時發生錯誤,說「不能隱式地將字符串轉換爲」十進制「。我也有另一個按鈕,發現最低工資等,但是什麼問題?我想創建例外,使文本框只需要數字,但它不會讓我:/
當我試圖改變從的NumericUpDown到文本框時出現錯誤,說:「不能隱式轉換‘字符串’到‘小數’。
。
這在我看來就像一個錯誤鑄造
employee.EmployeeId = (int)idNumericUpDown.Value;
試試這個:
employee.EmployeeId = decimal.Parse(idNumericUpDown.Value);
而且也看看TryParse
,這是更清潔。
當我這樣做時,它不喜歡「價值」部分?總是這樣做 – user1336868 2012-04-18 15:15:40
將.Value更改爲.Text。 – DoctorMick 2012-04-18 15:19:39
非常感謝你! – user1336868 2012-04-18 15:23:03
如何在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的鏈接解釋如何然而,處理事情像小數點等
這太棒了,謝謝! – user1336868 2012-04-18 15:26:33
你還能夠在這樣的TextBox上使用複製/粘貼嗎? – comecme 2012-04-18 16:04:54
@comecme:這是一個很好的問題。顧名思義,「OnKeyPress」只驗證擊鍵。 – 2012-04-18 16:09:13
這是我總是爲我的文本框做的事情。
功能(允許所有數值和退格鍵):
private bool NumericOnly(char e)
{
return (e > (char)47 & e < (char)58) | e == (char)8;
}
和onkeypress事件文本框的事件:
if (!NumericOnly(e.KeyChar)) e.Handled = true;
這裏是一個破解我發現。您可以隱藏的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,或使用解析和驗證:
CausesValidation
屬性設置爲true
用於文本框(默認情況下爲true)。如果不能從文本框中的文本分析十進制值,則會在文本框附近顯示錯誤標誌,並顯示消息「僅允許數字值」。
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控件用於輸入數字,因爲它說用戶「看到這個箭頭我在這裏只輸入數字?!」。而文本框沒有提到它接受的文本格式。
您可以創建一個「蒙面」文本框,該文本框只允許在添加到現有文本時匹配正則表達式的字符。
它的短:
首先,制定一個正則表達式是你的「編輯掩碼」。對於數字,它可以像^\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地址等的文本框。
WPF?的WinForms?的WebForms?其他一些形式? – Oded 2012-04-18 15:10:40