2012-09-18 5 views
0

C#의 Tool Strip 콤보 상자에 입력 마스크를 적용하는 방법을 알고있는 사람이 있는지 궁금한가요?ToolStripComboBox에 입력 마스크 적용 C#

드롭 다운 상자에 시간이 지남에 따라 IP 주소가 채워지며 사용자가 작성할 수있는 내용 (예 : 숫자 만 입력 할 수 있음, 숫자 만 입력 가능)을 제한하고 싶습니다.

누구든지 도와 주시면 감사하겠습니다.

미리 감사드립니다.

내 디자인이 변경

편집 그래서 지금은 다음의 KeyUp event 잡기 시도 입력이 유효한지 확인할 수있는 ToolStripComboBox의

+0

정규식을 적용 할 수 있습니까? 그런데 어떻게 할 것인가? – Feytality

+0

ToolStipComboBox와 ComboBox의 차이가 거의 없어야합니다. 아래의 두 가지 솔루션은 두 옵션간에 동일하게 작동해야합니다. – Trisped

+0

@Trisped ToolStripComboBox는 내가 이해하는 것으로부터 Formatting을 알고있는 ListControl을 상속받지 않기 때문에 사실이 아닙니다. – Feytality

답변

1

이 필요합니다. 그렇지 않으면 마지막 유효 입력으로 되돌립니다. Validating 이벤트와 비슷한 작업을 수행하고 싶을 것입니다 (CausesValidation이 true인지 확인하십시오).

또 다른 옵션은 MaskedTextBox을 만들고 드롭 다운 메뉴의 텍스트 상자 부분을 덮을 수 있도록 배치하십시오. 그런 다음 두 양식 컨트롤이 동기화되도록 이벤트를 연결해야합니다.

ErrorProvider 클래스를 살펴볼 수도 있습니다.

몇 가지 다른 방법 (예 : 0.3 초 ​​실행되는 타이머)이 있지만 일반적으로 성능이 떨어지거나 유지하기가 어렵습니다. 정규 표현식 의견에 대한

업데이트 :
내가이 일을했다면 나는 정규 표현식을 사용할 수 있습니다 아니면 수동으로 문자열을 구문 분석 할 수 있습니다. KeyUp 및 Validating 이벤트는 컨트롤의 유효성을 검사하는 곳입니다. KeyUp 이벤트는 입력 할 때 확인 옵션을 제공하는 반면 Validating 이벤트를 통해 컨트롤이 포커스를 잃을 때 유효성을 검사 할 수 있습니다. 어떤 것을 사용 하느냐는 당신이 원하는 사용자 경험에 달려 있습니다.

유효성을 검사하기 위해 KeyUp 이벤트를 사용하지 않으면 마지막 키를 누른 후 5 초 동안 실행되는 타이머를 추가 할 수 있습니다. 이 방법을 사용하면 오류가 표시 될 때 컨트롤에서 포커스를 잃을 필요가 없습니다.

편집 질문에 대한 업데이트 및 의견을 : 귀하의 질문에 일이 목록에 추가되지 방법 사용자의 입력을, 형식을 지정하는 방법에 있던대로
당신은 Format 이벤트를 사용할 수 있습니다. 따라서 솔루션은 ToolStripComboBox 또는 ComboBox과 함께 작동하지 않습니다.

ToolStripControlHost에 대한 설명서를 읽은 후 ToolStripComboBoxComboBox으로 전송할 수 있습니다. 그렇지 않다면 ToolStripControlHost을 사용하여 ComboBox을 양식에 배치 할 수 있습니다. - 이것은 잘못되었거나 불필요합니다. 따옴표 아래의 업데이트를 참조하십시오.

ToolStripControlHost는 ToolStripComboBox, ToolStripTextBox 및 ToolStripProgressBar의 추상 기본 클래스입니다.ToolStripControlHost 두 가지 방법으로 사용자 정의 컨트롤을 포함하여 다른 컨트롤을 호스팅 할 수 있습니다 :

  • 는 컨트롤에서 파생되는 클래스와 ToolStripControlHost를 구축합니다. 호스팅 된 컨트롤 및 속성에 완전히 액세스하려면 Control 속성을 해당 클래스가 나타내는 실제 클래스로 캐스팅해야합니다.

  • Extend ToolStripControlHost 및 상속 된 클래스의 기본 생성자에서 Control에서 파생 된 클래스를 전달하는 기본 클래스 생성자를 호출하십시오. 이 옵션을 사용하면 일반적인 컨트롤 메서드와 속성을 래핑하여 ToolStrip에서 쉽게 액세스 할 수 있습니다.

사용자 지정 컨트롤이나 다른 Windows Forms 컨트롤을 호스팅하려면 ToolStripControlHost 클래스를 사용하십시오.

ToolStripItem을 사용자 지정하려면 ToolStripControlHost에서 파생시키고 사용자 지정 구현을 만듭니다. OnSubscribeControlEvents와 같은 메서드를 재정 의하여 호스팅 된 컨트롤에서 발생하는 이벤트를 처리 할 수 ​​있으며 사용자 지정 기능을 속성에 배치하여 호스팅 된 컨트롤을 향상시킬 수 있습니다. 당신이 ToolStripComboBoxComboBox 속성을 통해 기본 ComboBox에 액세스 할 수 ToolStripComboBox 문서에 따르면 :

업데이트.

저는 이것을 사용하기 전에 일반적으로 컨트롤의 설명서를 읽는 것입니다. 나는 그것을 이해하지 못할 수도 있지만, 적어도 나는 무엇을 찾을 지 생각할 것입니다. :)

1

당신은 다음과 같은 형식의 이벤트를 만들어야합니다

private void comboBox1_Format(object sender, ListControlConvertEventArgs e) 
    { 
     e.Value = GetFullIpFormat((string)e.Value); 
    } 

을 그리고 여기 형식화하는 값에 대한 코드입니다

string GetFullIpFormat(string value) 
    { 
     string[] ip = new string[4]; 
     for (int i = 0; i < ip.Length; i++) 
     { 
      ip[i] = GetIpPart(i, value); 
     } 
     return string.Format("{0:###}.{1:###}.{2:###}.{3:###}", ip[0], ip[1], ip[2], ip[3]); 
    } 

    string GetIpPart(int partNumber, string ip) 
    { 
     string result = "000"; 
     int iLen = 3; 
     ip = ip.Replace(".", ""); 
     int iStart = partNumber * iLen; 
     if (ip.Length > iStart) 
     { 
      result = ip.Substring(iStart); 
      if (result.Length > iLen) 
      { 
       result = result.Substring(0, iLen); 
      } 
     } 
     return result; 
    } 

이 당신을 위해 형식화하는 할 것입니다. 동일한 이벤트에서 숫자를 입력 할 수 있습니다. 이렇게하면 행복하게 코딩 할 수 있습니다. :)