2012-05-24 3 views
3

캘린더 드롭 다운이 현재 WinForms DateTimePicker에 표시되는지 확인해야합니다. DateTimePicker에서 상속하는 사용자 정의 컨트롤이 있는데 탐색 키가있는 물건을 처리하기 위해 KeyDown 이벤트를 처리하고 있지만 달력 드롭 다운이 열려 있으면 해당 코드를 무시하고 싶습니다. 거기에 자신의 네비게이션 키를 사용하십시오. ComboBox 컨트롤로 DateTimePicker의 드롭 다운 상태를 검색하려면 어떻게해야합니까?

,이 열려 있는지 확인하기 위해 .DroppedDown 속성을 사용하기 쉬운, 그러나있는 DateTimePicker이 같은 속성이 없습니다. 나는 현재 다음하고있어

그러나

Private _isDroppedDown As Boolean = False 

Private Sub MyDateTimePicker_CloseUp(sender As Object, e As EventArgs) Handles Me.CloseUp 
    _isDroppedDown = False 
End Sub 

Private Sub MyDateTimePicker_DropDown(sender As Object, e As EventArgs) Handles Me.DropDown 
    _isDroppedDown = True 
End Sub 

을, 나는 수동 변수로 추적하는 것보다 컨트롤의 DroppedDown 상태를 얻을 수있는 더 좋은 방법이 있는지 알고 싶습니다? 당신이 무슨 짓을했는지

+1

DTP 당신은 지금 무엇을 잘못 조금 절름발이에 불과하다. –

+0

효과가 있지만 너무 우아하지는 않습니다. Windows DTP의 다른 제한 사항도 문제를 일으키기 때문에 대신 내 자신을 굴릴 것입니다. – MCattle

+0

답변으로 작성하십시오, 한스, 동의하겠습니다. – MCattle

답변

2

일회성 인스턴스 괜찮지 만, 양식/클래스가 여러 컨트롤이 포함 된 경우, 다루기 및 따라하기 어려워 질 수있는 변수로 그들에게 모든 추적.

간단한 대안 방법은 컨트롤의 .Tag 속성을 사용하여 변수 상태를 기록하고 테스트하는 것입니다. 그러나 더 좋은 방법은 컨트롤을 상속하고 원하는 속성을 추가하는 클래스를 직접 만드는 것입니다. 이미 가지고있는 코드를 사용하면됩니다. 따라서, 귀하의 경우,이 코드와 함께 "MyDateTimePicker"라고라는 클래스를 추가합니다 :

Public Class MyDateTimePicker 
    Inherits DateTimePicker 

    Dim _isDroppedDown As Boolean = False 

    Public Property IsDroppedDown() As Boolean 
     Get 
      IsDroppedDown = _isDroppedDown 
     End Get 
     Set(value As Boolean) 
      _isDroppedDown = value 
     End Set 
    End Property 

    Private Sub MyDateTimePicker_CloseUp(sender As Object, e As System.EventArgs) Handles Me.CloseUp 
     _isDroppedDown = False 
    End Sub 

    Private Sub MyDateTimePicker_DropDown(sender As Object, e As System.EventArgs) Handles Me.DropDown 
     _isDroppedDown = True 
    End Sub 

End Class 

를 다음 빌드 후 새 MyDateTimePicker 클래스는 프로젝트의 '구성 요소'탭의 도구 상자에 나타납니다. DateTimePickers와 관련된 모든 일반적인 이벤트, 메서드 및 속성과 새로운 .IsDroppedDown 속성을 갖습니다.

아, 정기적으로 사용하는 클래스라면 새로운 클래스 라이브러리로 만들고 프로젝트에 빌드 된 DLL을 포함시킬 수 있습니다.

+0

그게 바로 지금하고있는 일입니다. 내부 변수를 사용하지 않고 상태를 가져 오는 방법이 있는지 궁금합니다. – MCattle

+0

죄송합니다. OP의 일부가 DTP에서 상속 된 사용자 지정 컨트롤이라고 언급 한 것을 분명히 놓쳤습니다. 향후에 질문을 더 자세히 읽도록 가르쳐 줄 것입니다. 그래서 어쨌든, 당신이 싫어하는이 방법에 대해서는 무엇입니까? 틀림없이 DTP에 이미 이러한 속성이 내장되어 있으면 좋지만 그렇지 않기 때문에 가장 좋은 해결 방법 인 것 같습니다. 내 생각에 서브 클래 싱 등을 탐구하는 것보다 확실히 더 낫다. – Antagony

+0

나는 정보를 추적하지 않고 정보를 검색 할 수있는 어딘가에 하위 속성이 있는지 확인하려고했다. DTP의 다른 한계로 인해 TextBox에서 대신 클래스를 사용하려고합니다. – MCattle

0

더 좋은 방법은 없습니다. 현재 코드는 괜찮습니다.

은 (그냥 질문을 닫으려면이 답변을 게시. DTP 클래스에 구축을 위해 노력에서에 이동하기 때문에 나는했습니다.)

관련 문제