6

テキストが入力されたときに処理を実行するイベントを含むテキストボックスがあります。ここに記載されているように、英数字かどうかを簡単に確認できます。KeyEventArgが文字か数字かを判断できますか?

if ( ( ( e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z ) ||
( e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 ) ||
( e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9 ) )

このアプローチの問題は、、などを使用して手動で確認する必要があることです-?!¿[]()Key.OemMinusKey.OemQuestion

それがテキストキーストロークであるかどうかを確認する方法はありますか、それとも手動で確認する必要がありますか(私の意見ではあまりエレガントではありません)?

4

2 に答える 2

2

他のオプションは提案されていないため、次のコードを使用して、ほぼすべてのテキストキーストロークを許可しました。残念ながら、これはキーボードに依存するため、あまりエレガントではありません。うまくいけば、アプリケーションの重要な側面ではなく、使いやすさの問題にすぎません。

bool isText = (e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
            || e.Key == Key.OemQuestion || e.Key == Key.OemQuotes || e.Key == Key.OemPlus || e.Key == Key.OemOpenBrackets || e.Key == Key.OemCloseBrackets || e.Key == Key.OemMinus
             || e.Key == Key.DeadCharProcessed || e.Key == Key.Oem1 || e.Key == Key.Oem7 || e.Key == Key.OemPeriod || e.Key == Key.OemComma || e.Key == Key.OemMinus
              || e.Key == Key.Add || e.Key == Key.Divide || e.Key == Key.Multiply || e.Key == Key.Subtract || e.Key == Key.Oem102 || e.Key == Key.Decimal;
于 2012-08-20T08:23:34.930 に答える
1

このコードでは、数字と「。」のみを使用できます。

    private void txtJustNumber_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsDigit((char)(e.KeyChar)) &&
            e.KeyChar != ((char)(Keys.Enter)) &&
            e.KeyChar != (char)(Keys.Delete) &&
            e.KeyChar != (char)(Keys.Back))             
        {
            e.Handled = true;
        }
    }
于 2012-10-25T18:27:11.823 に答える