有辦法強制c#NumericUpDown同時接受逗號和點,以區分十進制值嗎?NumericUpDown:同時接受逗號和小數點作爲小數點分隔符
我已經定製了文本框做(實際上是用逗號代替點),但我很驚訝,沒有另一種方式..
This問題介紹瞭如何更改分隔符,但我想同時使用!
有辦法強制c#NumericUpDown同時接受逗號和點,以區分十進制值嗎?NumericUpDown:同時接受逗號和小數點作爲小數點分隔符
我已經定製了文本框做(實際上是用逗號代替點),但我很驚訝,沒有另一種方式..
This問題介紹瞭如何更改分隔符,但我想同時使用!
NumericUpDown控件使用操作系統的區域性來使用逗號或點作爲小數點分隔符。
如果您希望能夠同時處理分離,並把它們當作一個小數點分隔符(即:不是一個千個分隔符),您可以使用驗證或手動事件處理,例如:
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar.Equals('.') || e.KeyChar.Equals(','))
{
e.KeyChar = ((System.Globalization.CultureInfo)System.Globalization.CultureInfo.CurrentCulture).NumberFormat.NumberDecimalSeparator.ToCharArray()[0];
}
}
在這個例子中,你將用當前文化的NumericDecimalSeparator替換每個點和逗號。
感謝你真是太棒了! – T30
不客氣:) –
對於標準的NumericUpDown控件,十進制符號由操作系統的區域設置決定。
如果將值粘貼到NumericUpDown(通過ClipBoard和Ctrl + V),則solution provided by Nicolas R將不起作用。
我建議以下解決方案: 與其他控件一樣,NumericUpDown控件具有Text屬性。但是,它對設計師和智能感知系統是隱藏的。 使用Text屬性,你可以寫ValueChanged事件處理程序是這樣的:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
numericUpDown1.Text = numericUpDown1.Text.Replace(',', '.');
}
你爲什麼希望能夠同時使用?如果是針對多個應用程序部署/用戶,則應該使用他們的本地文化,因爲允許某些用戶使用逗號和點作爲小數點分隔符會非常混亂。 而NumericUpDown不允許這種行爲。您可以在valueChanged或keydown上強制使用逗號/點轉換? –
問題是,使用其他分隔符不會給出錯誤:它只是忽略了它犯了嚴重錯誤,我想避免它。我正在開發一個商業軟件,並且默默地將10.22轉換爲1022可能是一個大問題! – T30
@Nicolas R:valueChanged和keydown事件可訪問的值已被轉換(錯誤的分隔符已被刪除),並且我無法返回插入的值... – T30