使用数字键盘替换英文数字

时间:2019-10-29 10:58:13

标签: c# winforms

我一直在使用以下代码在运行时用阿拉伯数字替换英语数字,在一种新形式中,我只需要数字键盘即可替换数字并保持其他所有状态。

我应该使用哪个事件:KeyPress,KeyUp或KeyDown?
如何检查和转换KeyCode / KeyChar,反之亦然?
最重要的是如何实现整个想法?

private void ArabicNumbers_KeyPress(object sender, KeyPressEventArgs e)
    {
        switch (e.KeyChar)
        {
            case '0': e.KeyChar = '٠'; break;

            case '1': e.KeyChar = '١'; break;

            case '2': e.KeyChar = '٢'; break;

            case '3': e.KeyChar = '٣'; break;

            case '4': e.KeyChar = '٤'; break;

            case '5': e.KeyChar = '٥'; break;

            case '6': e.KeyChar = '٦'; break;

            case '7': e.KeyChar = '٧'; break;

            case '8': e.KeyChar = '٨'; break;

            case '9': e.KeyChar = '٩'; break;
        }
    }

1 个答案:

答案 0 :(得分:2)

我自己弄清楚了

private bool _isKeyNumPadClick;

private void TxtEdtDocNo_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
    {
        _isKeyNumPadClick = true;
    }

    else if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        _isKeyNumPadClick = false;
    }
}


private void Numbers_KeyPress(object sender, KeyPressEventArgs e)
{
    if (_isKeyNumPadClick)
    {
        switch (e.KeyChar)
        {
            case '0': e.KeyChar = '٠'; break;

            case '1': e.KeyChar = '١'; break;

            case '2': e.KeyChar = '٢'; break;

            case '3': e.KeyChar = '٣'; break;

            case '4': e.KeyChar = '٤'; break;

            case '5': e.KeyChar = '٥'; break;

            case '6': e.KeyChar = '٦'; break;

            case '7': e.KeyChar = '٧'; break;

            case '8': e.KeyChar = '٨'; break;

            case '9': e.KeyChar = '٩'; break;
        }
    }
    else
    {
        switch (e.KeyChar)
        {
            case '0': e.KeyChar = '0'; break;

            case '1': e.KeyChar = '1'; break;

            case '2': e.KeyChar = '2'; break;

            case '3': e.KeyChar = '3'; break;

            case '4': e.KeyChar = '4'; break;

            case '5': e.KeyChar = '5'; break;

            case '6': e.KeyChar = '6'; break;

            case '7': e.KeyChar = '7'; break;

            case '8': e.KeyChar = '8'; break;

            case '9': e.KeyChar = '9'; break;
        }
    }

    _isKeyNumPadClick = false;
}