2009-05-06 3 views
3

이 간단한 작업으로 인해 두통이 생겼습니다. 사용자가 텍스트 상자 컨트롤에 float.TryParse의 뒤에 오는 텍스트를 입력하도록하고 싶습니다.C# 텍스트 상자에 대한 입력 유효성 검사 : float

일반 TextBox를 사용하고 일부 btnOK_Click에서 Text를 확인할 수는 있지만 분명히 절름발이입니다. 또한 기본 제공 MaskedTextBox 컨트롤이 있지만 마스크를 float.TryParse과 같게 설정하지 못했습니다. 또한 포커스 변경이 발생할 때만 유효성을 확인하는 것 같습니다.

그물을 파헤 치다 보면 흥미로운 아이디어를 얻을 수 있었지만, 내가 좋아할만한 멋진 아이디어는 없었습니다.

이 문제를 어떻게 해결 했습니까? 나는 명백한 해결책을 놓친 것입니까, 아니면 직접이 기능을 구현해야합니까?

그래서 비슷한 스레드가 몇 개 있다는 것을 알고 있지만 실현 가능한 해결책은 없습니다.

업데이트 : 예, WinForms. 쉽게 alot을하게

답변

6

편집

음 ... 그냥 텍스트 상자 에 Validating 이벤트 처리기를 추가하고 뒤에 코드에서 TryParse을한다. 유효하지 않은 경우 사용자에게이를 알립니다.

검증 당신이의 TextChanged를 처리하거나 대신 키를 누를 때의 온/KeyUp 이벤트 핸들러

수, 사용자가 입력을 완료하고 비행 검사에 할 필요가 그래서 만약 이동 텍스트 상자에서 초점을 맞출 때 발생합니다 원래

이와 (쉼표 seperation에, 1 소수점, 등 ...을위한 계정)

의 asp.net, 당신은 RegularExpressionValidator의 조합을 사용할 수있는 경우

WPF/asp.net 또는 윈폼에서인가 RangeValidator을 사용하여 최소/최대 값 f 또는 부유물. 그 외에

, 그것은, updatepanel에 텍스트 상자를 포장 그것에 CustomServerValidator 스틱, 그것이 성공하면 서버 유효성 검사 기능에서의 TextBox.Text 값에 TryParse을하는 것입니다 보장 할 수있는 유일한 방법은, IS 유효하지 않은 경우 유효하지 않음

4

Validating을 사용하고 false로 유효성을 확인하십시오. 유효한 데이터를 입력하지 않으면 텍스트 상자에서 포커스를 이동할 수 없으므로 사용성에 큰 어려움이 있습니다.

LostFocus에서 TryParse()을 간단히 시도하여이 문제를 해결하고 TryParse가 실패 할 경우 텍스트 상자 배경에 붉은 색조를 적용하여 문제가 있음을 분명히합니다.

+1

내 마지막 솔루션에서는 포커스가 없어지면 마지막 유효 값을 캐싱하고, 필요한 경우 텍스트를 다시 설정합니다. – mafu

+2

색깔을 바꾸는 당신의 아이디어는 좋았습니다. 내 솔루션에서는 잘못된 값을 즉시 채색하면 값을 변경해야한다는 것을 사용자에게 분명하게 알릴 수 있습니다. – mafu

+0

TryParse가 실패했을 때 TryParse()를 TextChanged에두고 텍스트 상자의 배경색을 빨간색으로 설정하고 TryParse가 통과 할 때 배경색을 Color.Empty로 다시 설정했습니다. 이렇게하면 사용자가 입력 할 때 즉시 피드백이 제공됩니다. – CleanCoder