重新映射整个应用程序的密钥

时间:2014-03-06 20:46:35

标签: c# .net windows winforms

我的问题是我想将数字键盘点重新映射到整个应用程序的系统小数点分隔符。

因此,如果用户有逗号有小数点分隔符,那么当用户按下小数点时,我的应用程序将显示逗号。

我可以从以下位置获取分隔符:

System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;

可以改变当前的文化来做到这一点吗?或者还有另一种方式?

1 个答案:

答案 0 :(得分: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”和“enter”之间的按钮),“dot”就会转换为当前文化小数点分隔符。

在msdn中说AddMessageFilter会降低性能,但到目前为止我还没注意到......