1

テキストボックス内の有効な文字をロックダウンできるようにする必要があります。現在、次のような各文字をチェックできる正規表現があります。

[あざーず]

アルファ文字のみにロックダウンされます。

protected override void OnKeyPress(KeyPressEventArgs e)
{
  if (e.KeyChar == (char)Keys.Back)
  {
    base.OnKeyPress(e);
    return;
  }
  if (String.IsNullOrEmpty(this._ValidCharExpression))
  {
    base.OnKeyPress(e);
  }
  else
  {
    bool isValidChar = Regex.Match(e.KeyChar.ToString(),this._ValidCharExpression).Success;
    if (isValidChar)
    {
      base.OnKeyPress(e);
    }
    else
    {
      e.Handled = true;
    }
  }
}

正規表現コードを OnKeyPress コードに配置しましたが、Ctrl-V、Ctrl-C、Backspace などのすべての特殊キーを許可する必要がありました。

ご覧のとおり、バックスペース キーが処理されています。ただし、たとえば Ctrl-V は、ctrl キーに対して 1 回実行されますが、修飾キーが表示されないため、V キーを表示できません。

この状況を処理する最善の方法は何ですか?

4

5 に答える 5

4

MaskedTextBoxはあなたにぴったりかもしれません。

CodeProjct でFilterTextBoxを確認することもできます。それ(または説明されているアプローチ)を使用して、意図したことを実行できます。基本的な考え方は、(OnTextChanging イベントを介して) 表示される前に変更をキャンセルすることです。

于 2008-10-31T07:32:40.737 に答える
2

バリデーションを OnKeyPress ではなく OnTextChanged に入れ、バリデーションに合格するたびに値を変数に保存するとどうなるでしょうか? 次に、ユーザーが間違った文字列を貼り付けたり入力したりした場合に元に戻したり、何かが無効であるという他の UI ヒントを提供したりできます (ラベルのテキストを設定するなど)。

于 2008-10-31T06:42:37.170 に答える
1

OnTextChanged イベントで有効な文字のチェックを入れてみませんか

次に、オンキーダウンでCtrl + C、Ctrl + Vを処理します

また、 e.ModifierKeys == Keys.Control を使用して、コントロール キーをテストすることもできます。

http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.aspx

于 2008-10-31T05:42:28.057 に答える
0

私が思いついた解決策は、OnKeyDownイベントでキーをチェックし、キープレスを処理する必要がある場合はフラグを設定してから、OnKeyPressイベントでチェックインすることです。

protected override void OnKeyDown(KeyEventArgs e)
 {
    Keys keyCode = (Keys)e.KeyValue;
    base.OnKeyDown(e);
    if ((e.Modifiers == Keys.Control) ||
       (e.Modifiers == Keys.Control) ||
       (keyCode == Keys.Back) ||
       (keyCode == Keys.Delete))
    {
      this._handleKey = true;
    }
    else
    {
      // check if the key is valid and set the flag
      this._handleKey = Regex.Match(key.ToString(), this._ValidCharExpression).Success;
    }
  }




protected override void OnKeyPress(KeyPressEventArgs e)
  {
    if (this._handleKey)
    {
      base.OnKeyPress(e);
      this._handleKey = false;
    }
    else
    {
      e.Handled = true;
    }
  }
于 2008-11-20T00:51:10.903 に答える
0

OnKeyPress / OnKeyUp / OkKeyDown イベントのいずれかを使用してから、Char.IsLetter メソッドを使用して、入力されたキーが文字であることを確認できます。

于 2008-10-31T07:59:16.330 に答える