コメント(および入力した別の回答)で述べたように、テキストボックスでキーダウンまたはキープレスイベントをキャッチするには、イベントハンドラーを登録する必要があります。これは、TextBoxがフォーカスを失ったときにのみTextChangedが起動されるためです。
以下の正規表現を使用すると、許可する文字を一致させることができます
Regex regex = new Regex(@"[0-9+\-\/\*\(\)]");
MatchCollection matches = regex.Matches(textValue);
これは逆になり、許可されていない文字をキャッチします
Regex regex = new Regex(@"[^0-9^+^\-^\/^\*^\(^\)]");
MatchCollection matches = regex.Matches(textValue);
誰かがテキストボックスにテキストを貼り付ける可能性があるため、一致するものが1つあるとは思いません。その場合、textchangedをキャッチします
textBox1.TextChanged += new TextChangedEventHandler(textBox1_TextChanged);
private void textBox1_TextChanged(object sender, EventArgs e)
{
Regex regex = new Regex(@"[^0-9^+^\-^\/^\*^\(^\)]");
MatchCollection matches = regex.Matches(textBox1.Text);
if (matches.Count > 0) {
//tell the user
}
}
単一のキー押下を検証します
textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
// Check for a naughty character in the KeyDown event.
if (System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"[^0-9^+^\-^\/^\*^\(^\)]"))
{
// Stop the character from being entered into the control since it is illegal.
e.Handled = true;
}
}