■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;
}
}
}
|