문제

텍스트 상자에 유효한 문자를 잠글 수 있어야합니다. 현재 각 문자를 확인할 수있는 regex가 있습니다.

A-Za-Z

알파 문자로 고정됩니다.

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

Regex 코드를 Onkeypress 코드에 배치했지만 Ctrl-V, Ctrl-C 및 백 스페이스와 같은 모든 특수 키를 허용 할 수 있습니다.

보시다시피 백 스페이스 키가 처리됩니다. 그러나 Ctrl-V는 예를 들어 Ctrl 키에 대해 한 번 실행되지만 수정 자 키가 표시되지 않기 때문에 V 키를 볼 수 없습니다.

이 상황을 처리하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

Onkeypress / OnkeyUp / OkkeyDown 이벤트 중 하나를 사용한 다음 Char.Isletter 메소드를 사용하여 입력 된 키가 문자인지 확인할 수 있습니다.

다른 팁

maskedTextBox 당신에게 옳을 수도 있습니다.

당신은 또한 볼 수 있습니다 필터 텍스트 박스 Codeprojct에서 의도 한 바를 수행하기 위해 (또는 설명 된 접근법)를 사용할 수 있습니다. 기본 아이디어는 변경이 보이기 전에 (온 텍스트 변경 이벤트를 통해) 변경을 취소하는 것입니다.

onkeypress 대신 ontextChanged에 유효성 검사를 넣으면 유효성 검사를 통과 할 때마다 값을 변수로 저장하면 어떻게됩니까? 그런 다음 사용자가 부정확 한 문자열을 파악하거나 입력하면 되돌릴 수있을뿐만 아니라 다른 UI 힌트가 유효하지 않다는 힌트를 제공 할 수 있습니다 (예 : 레이블의 텍스트를 설정 함).

OnTextChanged 이벤트에 유효한 캐릭터를 확인하지 않겠습니까?

그런 다음 Ctrl+C, Ctrl+V를 ON Key Down을 처리합니다.

또한 e.modifierkeys == keys.control을 사용하여 제어 키를 테스트 할 수 있습니다.

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

제가 생각해 낸 솔루션은 Onkeydown 이벤트에서 키를 확인한 다음 Keypress를 처리 해야하는 경우 플래그를 설정 한 다음 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;
    }
  }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top