문제

Microsoft가 .NET Framework와 함께 숫자 텍스트 상자를 제공하지 않는 이유를 아는 사람이 있습니까?입력한 문자가 항상 유효한 숫자인지 확인하는 텍스트 상자가 있습니까?이는 다양한 종류의 응용 프로그램에서 일반적으로 사용되는 것이며 실제로 대부분의 GUI 라이브러리(글쎄, 내가 아는 라이브러리)가 어떤 방식으로든 제공하는 것입니다.그렇지 않은 반면 저것 직접 작성하는 것도 어렵고 사소한 일도 아닙니다.

그래서 저는 누군가가 이 누락을 합리화할 수 있는지 알아내는 데 관심이 있습니다.

편집하다:제안해 주셔서 감사합니다.마스크된 텍스트 상자와 숫자 업다운이 그 자리를 차지하지만;텍스트 상자처럼 보이지만 키를 누를 때 입력이 유효한 숫자에 해당하는지 자동으로 유효성 검사를 수행하는 컨트롤에 관심이 있습니다.내 (제한된) 경험에 따르면 이것은 꽤 많이 사용되는 것입니다. (우리가 항상 옆에 업-다운 컨트롤을 원하지 않는 것처럼 마스크된 텍스트 상자에 의해 부과된 정적 제약 조건을 항상 원하지는 않습니다) .

인터넷에는 다양한 수준의 품질을 갖춘 구현이 많이 있으며 실제로 이에 대한 예도 있습니다. MSDN.

편집2:감사합니다. 숫자 업다운은 숫자 입력에만 사용하는 .NET 컨트롤인 것 같습니다(실제로 명시적인 숫자 텍스트 상자 컨트롤이 없는 이유도 여기에 있습니다).숫자가 아닌 문자의 입력(키 누르기, 붙여넣기 등)을 자동으로 허용하지 않으면 좋았겠지만 컨트롤이 포커스를 잃었을 때 유효성 검사를 수행하는 것만으로도 충분하다고 생각합니다.그리고 정말로 관심이 있다면 키 누르기, 붙여넣기 유효성 검사를 수행할 수 있습니다...

도움이 되었습니까?

해결책

나는 Garry Shutlers가 NumericUpDown을 사용하도록 두 번째로 권장했습니다.위아래 컨트롤이 마음에 들지 않을 수도 있지만 ~이다 Windows의 숫자 입력 컨트롤의 표준 모양이므로 다른 모양을 사용하는 것에 대해 다시 생각해 봐야 합니다.

자신만의 구현을 코딩하게 된다면(또는 웹에서 구현을 찾게 된다면) 주의해야 할 몇 가지 함정이 있습니다.키 누르기 외에도 값을 컨트롤에 입력하는 방법에는 여러 가지가 있다는 점을 기억하세요.MSDN 링크에 있는 항목은 붙여넣기를 무시하지 않으므로 숫자가 아닌 문자열을 컨트롤에 쉽게 Ctrl-V할 수 있습니다.

다른 팁

당신은 MaskedTextBox

거기에는 숫자위로 아래로 숫자 입력을 위해 특별히 제작되었으며 TextBox처럼 사용할 수 있는 컨트롤입니다.

WinForms 2.0부터는 MaskedTextBox가 있습니다.마스크를 원하는 대로 설정할 수 있습니다.숫자의 경우 마스크를 모두 0으로 사용하세요.

일부 .NET Framework 컨트롤은 이상하게도 자신이 래핑하는 기본 Windows 컨트롤의 모든 기능을 노출하지 않습니다.이 경우에는 어떤 이유로 ES_NUMBER 스타일이 구현되지 않았습니다.

HandleCreated 이벤트를 처리하거나 TextBox가 봉인되지 않았으므로 OnHandleCreated를 재정의하고 호출할 수 있습니다. SetWindowLong 설정하려면 ES_NUMBER 기본 편집 컨트롤의 스타일입니다. ES_NUMBER WinUser.h에서 0x2000으로 정의됩니다.

또한 TextBox 클래스를 파생시키고 키패드 이벤트를 가져와서 숫자 외에는 아무것도 쓰여지지 않았는지 확인할 수도 있습니다.

웹 페이지라면 Javascript를 사용하여 HTML 텍스트 상자에도 동일한 작업이 수행되었을 것입니다.

Microsoft는 도구 상자에 누락된 컨트롤과 관련된 공백을 메우기 위해 이를 타사에 맡깁니다.나는 시간과 비용이 그들의 이론적 근거에 포함될 것이라고 생각합니다.

그러나 이 경우에는 다음과 같은 생각이 듭니다. 필터링된텍스트상자 설명하는 기능을 제공합니다.

두 번째 편집 내용을 바탕으로:

그만큼 Windows 양식 FAQ 문제의 텍스트 상자에서 문자를 제한하는 방법을 알려줍니다. 26.12:

26.12 텍스트 상자에 허용되는 문자를 어떻게 제한할 수 있나요?

텍스트 상자의 KeyPress 이벤트를 처리할 수 있으며 전달된 문자가 허용되지 않는 경우 문자가 처리되었음을 표시하는 것으로 이벤트 인수를 표시합니다.아래는 숫자(및 백스페이스 등의 제어 문자)만 허용하는 파생 TextBox입니다.코드 조각이 파생된 텍스트 상자를 사용하더라도 상위 양식에 처리기를 추가하기만 하면 되므로 필요하지 않습니다.

코드 예제는 FAQ를 참조하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top