텍스트 상자에서 유효한 문자를 잠그십시오
-
05-07-2019 - |
문제
텍스트 상자에 유효한 문자를 잠글 수 있어야합니다. 현재 각 문자를 확인할 수있는 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;
}
}