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

わんくま同盟

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

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

ツリー一括表示

テキストボックスを半角英数字のみ入力可にしたい /くろごま (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
Re[1]: テキストボックスを半角英数字のみ入力可にしたい /KOZ (21/02/22(Mon) 10:23) #96880
New Re[1]: テキストボックスを半角英数字のみ入力可にしたい /大谷刑部 (21/02/24(Wed) 10:00) #96893


親記事 / ▼[ 96863 ] ▼[ 96879 ] ▼[ 96880 ] ▼[ 96893 ]
■96858 / 親階層)  テキストボックスを半角英数字のみ入力可にしたい
□投稿者/ くろごま (3回)-(2021/02/19(Fri) 16:37:16)

分類:[C#] 

C#のフォームアプリで制作しています。
textboxを半角英数字のみ入力可能にするにはどうすればいいのでしょうか?
サンプルコードなどを教えていただければ助かります。

[ □ Tree ] 返信 編集キー/

▲[ 96858 ] / 返信無し
■96863 / 1階層)  Re[1]: テキストボックスを半角英数字のみ入力可にしたい
□投稿者/ Azulean (1182回)-(2021/02/19(Fri) 20:22:35)
No96858 (くろごま さん) に返信
> C#のフォームアプリで制作しています。
> textboxを半角英数字のみ入力可能にするにはどうすればいいのでしょうか?

「textbox 半角英数字のみ C#」で検索するといろいろと出てきますが、試されていますか?
汎用的な課題ほど、世の中にサンプルはあふれているはずなので検索してみた方が速いかもしれません。
[ 親 96858 / □ Tree ] 返信 編集キー/

▲[ 96858 ] / 返信無し
■96879 / 1階層)  Re[1]: テキストボックスを半角英数字のみ入力可にしたい
□投稿者/ kiku (218回)-(2021/02/22(Mon) 10:11:37)
2021/02/22(Mon) 10:13:23 編集(投稿者)
2021/02/22(Mon) 10:13:11 編集(投稿者)

<pre><pre>■No96858 (くろごま さん) に返信
> C#のフォームアプリで制作しています。
> textboxを半角英数字のみ入力可能にするにはどうすればいいのでしょうか?
> サンプルコードなどを教えていただければ助かります。

下記URLが参考になると思います。
https://dobon.net/vb/dotnet/control/numerictextbox.html

上記には、数字のみ入力可能とするサンプルがありますが
応用できませんか?
[ 親 96858 / □ Tree ] 返信 編集キー/

▲[ 96858 ] / 返信無し
■96880 / 1階層)  Re[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;
        }
    }
}

[ 親 96858 / □ Tree ] 返信 編集キー/

▲[ 96858 ] / 返信無し
■96893 / 1階層)  Re[1]: テキストボックスを半角英数字のみ入力可にしたい
□投稿者/ 大谷刑部 (124回)-(2021/02/24(Wed) 10:00:32)
No96858 (くろごま さん) に返信
> textboxを半角英数字のみ入力可能にするにはどうすればいいのでしょうか?

手入力の半角英数のみを入力可とするのはKeyPressイベントで半角英数およびバックスペースのみ有効とすれば可能ですが、
コピペに関してはどうする予定でしょうか?

コピペを無効にしてよいなら、上記で[ctrl]+Vが既に無効になっているので、Form_Load等で当該テキストボックスの右クリックメニューを無効にしてしまえば、
全額の入力を完全排除できます。

半角英数のコピペを許したい場合には、[ctrl]+Vは有効にした上で、張り付いた全角文字を除去しなきゃならないので、かなり複雑度が増すと思います。
[ 親 96858 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -