C# 用数字键盘代替英文数字

C# 用数字键盘代替英文数字,c#,winforms,C#,Winforms,我一直在使用下面的代码在运行时用阿拉伯数字替换英文数字,在一种新的形式中,我只需要数字键盘来替换数字,并保持其他一切不变 我应该使用哪个事件:按键、向上键或向下键? 如何检查和转换KeyCode/KeyChar,反之亦然? 最重要的是如何实现整个想法 private void ArabicNumbers_KeyPress(object sender, KeyPressEventArgs e) { switch (e.KeyChar) {

我一直在使用下面的代码在运行时用阿拉伯数字替换英文数字,在一种新的形式中,我只需要数字键盘来替换数字,并保持其他一切不变

我应该使用哪个事件:按键、向上键或向下键?
如何检查和转换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;
        }
    }

我自己想出来的

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;
}
private bool\u isKeyNumPadClick;
私有void TxtEdtDocNo_KeyDown(对象发送方,KeyEventArgs e)
{
if(e.KeyCodeKeys.NumPad9)
{
_isKeyNumPadClick=true;
}
否则如果(e.KeyCodeKeys.D9)
{
_isKeyNumPadClick=false;
}
}
私有无效号码\u按键(对象发送者,按键事件参数e)
{
如果(_isKeyNumPadClick)
{
开关(例如KeyChar)
{
案例“0”:e.KeyChar='٠';break;
案例“1”:e.KeyChar='١';break;
案例“2”:e.KeyChar='٢';break;
案例“3”:e.KeyChar='٣';break;
案例“4”:e.KeyChar='٤';break;
案例“5”:e.KeyChar='٥';break;
案例“6”:e.KeyChar='٦';break;
案例“7”:e.KeyChar='٧';break;
案例“8”:e.KeyChar='٨';break;
案例“9”:e.KeyChar='٩';break;
}
}
其他的
{
开关(例如KeyChar)
{
大小写“0”:e.KeyChar=“0”;break;
案例“1”:e.KeyChar='1';break;
案例“2”:e.KeyChar='2';break;
案例“3”:e.KeyChar='3';break;
案例“4”:e.KeyChar='4';break;
案例“5”:e.KeyChar='5';break;
案例“6”:e.KeyChar='6';break;
案例“7”:e.KeyChar='7';break;
案例“8”:e.KeyChar='8';break;
案例'9':e.KeyChar='9';break;
}
}
_isKeyNumPadClick=false;
}

如果您按下一个键,但仍未释放,您可以看到该字符已经出现。因此,你可能应该使用OnKeyDown。如果你把信息放在不同的down、press和up中,你会看到所有3个数字都适用,但是,你在每个阶段都有不同的选项。这并没有回答问题!