2017-01-09 16 views
0

我正在製作關於財務管理WPF中的程序,我需要像標題描述的文本框。不能使用一個逗號或點在c#中的數字文本框wpf

在您調用此複本之前,我已在多個網站中進行搜索,並且所有提出的解決方案都只適用於數字,但似乎無法識別我的點鍵或逗號鍵(我使用拉丁美洲qwerty鍵盤) ,我不知道我嘗試的解決方案是區域特定的(因爲鍵盤)還是其代碼上的東西。

到目前爲止,我曾嘗試:

This, with multiple Regex I have found around the internet that should have the same result

的和以前一樣,但是手動比較e.KeyChar到Convert.ToChar( 「」)

使用KeyDown事件和多個if (e.Key == Key.DX)(這適用於點,但不適用於數字,我試過D0-D9鍵和OEM)

這些都不適用於我,我需要用數字和因爲他們的pu來做數學我需要他們有小數點(或逗號)

任何幫助或想法表示讚賞。

+0

你是什麼意思「拉丁美洲」?鍵盤佈局的名稱如何?某些佈局會改變數字鍵盤的'.'鍵的含義以輸入文化的小數點分隔符。您是否正在使用與您的鍵盤不匹配的佈局?例如,英國佈局切換'@'和''',所以使用在英國以外購買的鍵盤會導致問題。這不是一個軟件問題,雖然 –

回答

2

您可以使用允許任何字符的標準文本框,然後在KeyDown或TextChanged上使用檢查文本中非法字符(數字,逗號或句點之外的任何內容)的事件處理程序。它看起來像這樣:

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    string result = ""; 
    char[] validChars = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '.' }; // these are ok 
    foreach (char c in textBox1.Text) // check each character in the user's input 
    { 
     if (Array.IndexOf(validChars, c) != -1) 
      result += c; // if this is ok, then add it to the result 
    } 

    textBox1.Text = result; // change the text to the "clean" version where illegal chars have been removed. 
} 
+0

哇,我認爲這種方法比我在網上看到的更容易! !這個工作完美! –

+0

使用正則表達式也可以用於同樣的事情,但由於選擇的數量是如此有限這是沒有問題的 – Kelly

+0

@ElementalPete,那麼無效的數字格式呢?像「127.0.0.1」?所有的字符都是有效的 – ASh

相關問題