2013-08-27 55 views
0

我目前正在爲歐洲的一家公司開發計算程序。他們正在使用公制系統,並將默認的「,」作爲小數點符號。用於計算程序的區域和語言中的「小數符號」問題

我的程序計算不同的東西,一些計算是由來自C#/ WPF中文本框的TextChanged事件觸發的。所有的工作都很好,直到幾天前,當用戶在文本框中鍵入數字時,他對一些計算沒有任何反應抱怨。在結果框中沒有任何錯誤或沒有任何結果(對於某些計算)沒有結果。我發現由於某種原因,默認值(由我設置)「0,05」的文本框未顯示,該框爲空。但更進一步,有「0,5」顯示值(也由我設定)。我對此很困惑,並開始調試並尋找可能的原因,但沒有發現。過了一會兒,我意識到他已將「區域和語言」下的「小數點符號」從「,」更改爲「。」。這樣做是爲了讓美國的程序能夠正常工作,因爲如果沒有完成,該程序在啓動時會崩潰!所以我有它,把它改回來,一切正常。但這是不希望的,因爲用戶不希望用這個設置來切換,所以我需要爲此找到一個解決方案。

我在「PreviewTextInput」中創建了一個方法,以確保它是一個數字並且只包含一個小數分隔符。我不明白這可能是它的原因還是你呢?

private void CheckIsNumeric(TextCompositionEventArgs e, object sender) 
    { 
     int result; 

     if (!(int.TryParse(e.Text, out result) || e.Text == ",")) 
     { 
      e.Handled = true; 
     } 
     if (e.Text == "," && (sender as TextBox).Text.IndexOf(',') > -1) 
      e.Handled = true; 

    } 

爲什麼值「0,5」目前在啓動,但「0.05」「被刪除」,最有可能的是亂搞這一切的呢? 有沒有辦法解決這個問題,我需要一些新的想法,因爲我目前堅持在我的腦海中根據地區和語言改變程序中的某些東西。

任何幫助表示讚賞。

更新:

如果我更改了地區和瑞典語「格式」英文它工作正常兩種方式與「小數點符號」我的設置。如果將該程序設置爲「,」或「。」,程序的行爲方式相同。爲什麼在使用瑞典語時不起作用,並擁有「。」值?

+2

爲什麼使用** int **。tryparse? –

+0

因爲我想檢查方法使它是一個有效的數字,關於也檢查,所以只有一個小數分隔符。我不應該用你的意思嗎? – erikduvet

+0

'double.TryParse(text,NumberStyles.Float,CultureInfo.CurrentCulture,out result);' – I4V

回答

0

我會做這樣的事情:

string[] numbers = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; 

// check numbers. 
if(numbers.Contains(e.Text)) 
{ 
    e.Handled = true; 
    return; 
} 

// check separator only occurs ones. 
if(e.Text == ",") 
{ 
    e.Handled = (((TextBox)sender).Text.IndexOf(',') == -1); 
    return; 
} 

鑑於e.Text是鍵入的字符。如果e.Text是完整文本,您可以嘗試使用:

double result; 

// any fixed culture that uses a , as decimal separator. 
CultureInfo cultureInfo = new CultureInfo("nl-NL"); 

e.Handled = double.TryParse(e.Text, NumberStyles.Float, cultureInfo, out result); 
+0

這可能是一個很好的替代方法,但它並沒有解決問題,任何改變對於鍵入時沒有更新的主要問題仍然沒有任何幫助。即使「0,5」存在,文本框中仍然缺少「0,05」,但它們具有與它們相同的方法。 – erikduvet

+0

我認爲這個問題超出了這個方法。 –

+0

是的,這裏也一樣。我只是不明白爲什麼程序會從文本框中「刪除」一個「0,05」的值,但在啓動時保留「0,5」的值?也許我可以通過替換來解決它「。「with」,「但用戶甚至在發生」錯誤「時還沒有開始使用該程序。 – erikduvet