2011-09-22 11 views
0

그냥 숫자로 된 TextBox를 항목으로 원했습니다. 그래서 나는 다음과 같은 코드를 텍스트 상자의 KeyPress 이벤트에 작성했습니다.Winforms의 사용자 지정 컨트롤 라이브러리

if(!char.IsDigit(e.KeyChar)) 
{ 
    e.handled = true; 
} 

그리고이 코드는 훌륭하게 작동했습니다.

내 솔루션을 구축하고 내 도구 상자에서 컨트롤을 가지고 심지어이 완벽하게 잘 작동했다 :하지만 일반적 그럼 내가 다음 코드와 부분 클래스를 쓴 내 응용 프로그램의 많은 장소에서 그들을 필요합니다.

그러나 몇 가지 또는 다른 사양과 같은 많은 TextBoxes, 일부 특수 문자를 허용해서는 안된다 일부는 소수점을 받아 들여야합니다. 소수점 이하 2 자리수까지 ... .... 등등이 필요합니다. 많은 어플리케이션에서 컨트롤의 종류.

그래서 내 사용자 지정 컨트롤의 라이브러리 (.dll)를 작성하고 가능한 경우 유효성 검사를 위해 생각했습니다. 솔직히 나는 라이브러리 사용에 대해별로 생각하지 않는다. 그래서 나는 2 개의 다른 종류의 텍스트 박스를 가진 라이브러리를 만들고 그것들 중에서 .dll 파일을 만들었다. 이제 다른 winform 응용 프로그램을 만들었고 사용자 지정 컨트롤 .dll 파일에 대한 참조를 추가했습니다. 그러나 아무 일도 일어나지 않았습니다. 그래서 나는 그것을 달성하기위한 나의 접근 방식이 무엇인지 알고 싶었습니다. 이러한 종류의 작업을 수행하는 더 좋은 방법이 있습니까? 새로운 제안도 환영합니다. 미리 감사드립니다.

+0

"하지만 아무 일도 없었습니다."를 정의 할 수 있습니까? 무슨 일이 있었 니? 도구 상자에 컨트롤이 없거나 이전처럼 컨트롤이 작동하지 않습니까? – LarsTech

+0

컨트롤이 도구 상자에 없습니다. 하지만 지금은 도구 상자에서 항목을 선택하여 선택했습니다. – Sandy

답변

0

도구 상자를 마우스 오른쪽 단추로 클릭하고 "항목 선택 ..."을 선택한 다음 사용 가능한 목록에서 컨트롤을 선택하십시오. 당신이 그들을 볼 수 없다면, 다음 찾아보기 버튼을 클릭하고 DLL을 선택하십시오. 보조 노트에

, 당신은 추가 등록하여 두 개의 텍스트 상자를 결합 할 수 있습니다

public class MyTextBox : TextBox 
{ 
    public bool AllowDigitsOnly { get; set; } 

    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
    if (this.AllowDigitsOnly) 
    { 
     if (!char.IsDigit(e.KeyChar)) 
     e.Handled = true; 
    } 
    base.OnKeyPress(e); 
    } 
} 
+0

많은 도움이되었습니다. 감사합니다. – Sandy

0

나는 정규 표현식에 따라 입력을 제어하는 ​​하나의 사용자 지정 컨트롤을 구현 건의 할 것입니다. 키 누르기를 제한하는 대신 텍스트가 정규 표현식과 일치하지 않으면 포커스가 손실되는 것을 방지 할 수 있습니다. 배경색이나 팝업 풍선의 일부 변경은 오류 및/또는 입력 내용에 대한 설명을 표시하는 데 사용할 수 있습니다.

0

나는 비슷한 것을했는데 정수와 두 가지 유형 (기본적으로 내 요구 사항에 대해 소수점 허용) 대신 두 가지 유형을 만드는 대신 텍스트 상자에 속성을 추가하는 것이 도움이되었습니다.

속성을 만들면 디자인 타임에 속성보기에서 텍스트 상자를 정수 또는 이중으로 표시할지 여부를 실제로 선택할 수 있습니다. 디자인 타임에 설정 한 Font, ReadOnly 등을 가지고있는 것처럼.

여기,

 /// <summary> 
     /// Identify textbox type as integer or double 
     /// </summary> 
     public enum numericID 
     { 
      Integer, 
      Double 
     }; 

     /// <summary> 
     /// Textbox type property, default is integer 
     /// </summary> 
     private numericID numericType = numericID.Integer; 

     /// <summary> 
     /// Getter and setter for property 
     /// </summary> 
     [Browsable(true), 
     DisplayName("TextBoxType"), 
     DefaultValue(numericID.Integer), 
     Description("Indicates whether the textbox must only accept integers or doubles."), 
     Category("Behavior")] 
     public numericID NumericType 
     { 
      get { return numericType; } 
      set { numericType = value; } 
     } 

속성을 사용하려면 코드이며, 때 onKeyPress 이벤트는 실제로 msdn website에서 매우 편리합니다. 숫자에 대한 모든 유형의 문자를 처리하며 가장 적합한 문자를 선택할 수 있습니다.

+0

Browsable (true), DisplayName ... 어느 네임 스페이스입니까? – Sandy

+0

using System.ComponentModel; – nbz

관련 문제