2014-03-06 59 views
0

我的問題是我想重新映射到我的整個應用程序的系統小數分隔符的數字鍵盤點鍵。重新映射整個應用程序的鍵

因此,如果用戶有一個逗號有小數點分隔符,那麼當用戶按下numpad點時,我的應用程序將顯示逗號。

我可以從分離器:

System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator; 

是可以改變的CurrentCulture做到這一點?或者有另一種方式?

+0

不會誰擁有不同的小數點分隔符的人有不同的鍵盤佈局?當然,並不是所有這些,而是​​一個很好的數額。 – gunr2171

+0

在適當的位置您可以檢測到用戶按下了*點*並將其替換爲*逗號*。例如,如果您的應用程序需要這種行爲,那麼您可以創建自己的文本框控件,該控件源自原始的「TextBox」,並在那裏實現該行爲,因此您將它放在一個地方並以可重用的形式存在。 –

+0

聽起來像一個*真的*糟糕的Thread.CurrentCulture設置錯誤。你的用戶已經知道逗號和小數點之間的區別,不要亂用他的鍵盤。只要確保*你*知道區別。 –

回答

0

最後我解決,我找到了解決方案,但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會降低性能,但我至今沒有看到...