最後我解決,我找到了解決方案,但msdn是vb.net,所以我翻譯成C#
首先,我把下面的代碼在我的Program.cs類,(所以這會影響整個應用程序):
if (System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator != ".")
System.Windows.Forms.Application.AddMessageFilter(new DecimalConverterFilter());
,那麼你需要創建decimalconverterfilter類:
internal class DecimalConverterFilter : IMessageFilter
{
private const uint WM_KEYDOWN = 0x100;
public bool PreFilterMessage(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_KEYDOWN)
{
Keys toets = (Keys)Convert.ToInt32(m.WParam.ToInt32() & (int)Keys.KeyCode);
if (toets == Keys.Decimal)
{
SendKeys.Send(Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator);
return true;
}
}
return false;
}
}
,現在每次的小數點的按鈕(按鈕是補間「0」和「輸入」),「點」被轉換爲當前文化小數分隔符。
MSDN中說,AddMessageFilter會降低性能,但我至今沒有看到...
不會誰擁有不同的小數點分隔符的人有不同的鍵盤佈局?當然,並不是所有這些,而是一個很好的數額。 – gunr2171
在適當的位置您可以檢測到用戶按下了*點*並將其替換爲*逗號*。例如,如果您的應用程序需要這種行爲,那麼您可以創建自己的文本框控件,該控件源自原始的「TextBox」,並在那裏實現該行爲,因此您將它放在一個地方並以可重用的形式存在。 –
聽起來像一個*真的*糟糕的Thread.CurrentCulture設置錯誤。你的用戶已經知道逗號和小數點之間的區別,不要亂用他的鍵盤。只要確保*你*知道區別。 –