C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■96880 / 1階層)  テキストボックスを半角英数字のみ入力可にしたい
□投稿者/ KOZ (160回)-(2021/02/22(Mon) 10:23:07)
No96858 (くろごま さん) に返信
> C#のフォームアプリで制作しています。
> textboxを半角英数字のみ入力可能にするにはどうすればいいのでしょうか?
> サンプルコードなどを教えていただければ助かります。

TextBox を継承し、OnKeyPress メソッドと WM_PASTE メッセージを処理すればよいかと。

using System.Text;
using System.Windows.Forms;

class AlphNumText : TextBox
{
    const int WM_PASTE = 0x0302;    // クリップボード貼り付け

    const char BACKSPACE = '\b';    // Backspace キー
    const char CTRL_C = '\x03';     // CTRL+C
    const char CTRL_V = '\x16';     // CTRL+V
    const char CTRL_X = '\x18';     // CTRL+X
    const char CTRL_Z = '\x1A';     // CTRL+Z

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        switch (e.KeyChar)
        {
            case BACKSPACE:
            case CTRL_C:
            case CTRL_V:
            case CTRL_X:
            case CTRL_Z:
                break;
            default:
                if (!IsValidChar(e.KeyChar))
                {
                    e.Handled = true;
                    return;
                }
                break;
        }
        base.OnKeyPress(e);
    }

    protected virtual bool IsValidChar(char c)
    {
        return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9');
    }

    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case WM_PASTE:
                if (Clipboard.ContainsText())
                {
                    var sb = new StringBuilder();
                    foreach (var c  in Clipboard.GetText())
                    {
                        if (IsValidChar(c))
                        {
                            sb.Append(c);
                        }
                    }
                    base.Paste(sb.ToString());
                }
                break;
            default:
                base.WndProc(ref m);
                break;
        }
    }
}

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←テキストボックスを半角英数字のみ入力可にしたい /くろごま 返信無し
 
上記関連ツリー

テキストボックスを半角英数字のみ入力可にしたい / くろごま (21/02/19(Fri) 16:37) #96858
Re[1]: テキストボックスを半角英数字のみ入力可にしたい / Azulean (21/02/19(Fri) 20:22) #96863
Re[1]: テキストボックスを半角英数字のみ入力可にしたい / kiku (21/02/22(Mon) 10:11) #96879
テキストボックスを半角英数字のみ入力可にしたい / KOZ (21/02/22(Mon) 10:23) #96880 ←Now
Re[1]: テキストボックスを半角英数字のみ入力可にしたい / 大谷刑部 (21/02/24(Wed) 10:00) #96893

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信