2016-08-19 2 views
0

맞춤 캘린더를 만들었으며 약간 문제가 있습니다. 제목에서 알 수 있듯이 패널을 클릭하면 클릭 이벤트가 발생합니다. 여기 내 코드가있다.패널을 클릭하면 포함 라벨의 클릭 이벤트가 트리거됩니다.

클릭 이벤트 :

Private Sub label_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles m1.Click, m2.Click, m3.Click, m4.Click, m5.Click, m6.Click, tu1.Click, tu2.Click, tu3.Click, tu4.Click, tu5.Click, tu6.Click, w1.Click, w2.Click, w3.Click, w4.Click, w5.Click, w6.Click, th1.Click, th2.Click, th3.Click, th4.Click, th5.Click, th6.Click, f1.Click, f2.Click, f3.Click, f4.Click, f5.Click, f6.Click, sa1.Click, sa2.Click, sa3.Click, sa4.Click, sa5.Click, sa6.Click, su1.Click, su2.Click, su3.Click, su4.Click, su5.Click, su6.Click 

    Dim clickedLabel = TryCast(sender, Label) 
    If clickedLabel IsNot Nothing Then 
     If clickedLabel.ForeColor = Color.Black Then Exit Sub 
     clickedLabel.ForeColor = Color.Green 
    End If 
     End Sub 

enter image description here

답변

0

다음은 예입니다. 레이블을 찾으려면 코드를 조정해야 할 수도 있습니다.

Private Sub panel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    Dim panel = CType(sender, Panel) 
    Dim label = panel.Controls.OfType(Of Label).Single 
    label_Click(label, e) 
End Sub 

다음은 동적으로 핸들러를 연결하는 예입니다. 다시 한번 패널/라벨을 찾으려면 코드를 조정해야하지만 모든 핸들 조항을 추가하지 않아도됩니다.

Private Sub AddHandlers() 
    For Each panel In Me.Controls.OfType(Of Panel)() 
     Dim label = panel.Controls.OfType(Of Label).Single 
     AddHandler panel.Click, AddressOf panel_Click 
     AddHandler label.Click, AddressOf label_click 
    Next 

End Sub 
+0

감사합니다. 나는 여전히 AddHandlers Sub를 사용하는 방법을 이해할 수 없다. 괜찮으 시다면, 더 설명해 주시겠습니까? 내 코드의 다른 부분을 게시 할 수 있습니다. – SlicedBread

+0

게으르며 오류가 발생하기 쉽기 때문에 나는 그것을 좋아합니다. 'AddHandler object.EventName, Handler'는'object'가'EventName'을 발생시킬 때마다'Handler'를 실행시킵니다. 이와 관련하여 Handles/withevents 패턴과 유사합니다 (실제로 모든 핸들/이벤트는 배후의 것을 관리합니다). 그래서 당신은 폼의 모든 패널 객체에서 이것을 호출하고 싶습니다. 왜 컨트롤 컬렉션을 반복할까요? 귀하의 패널이 다른 레이아웃의 자식 (예 : TableLayout)이라면 그 대신에 반복자를 반복하십시오. 예 : Me.TableLayout1.Controls.OfType (패널의)()' – FloatingKiwi

0

코드에이 내용을 추가하기 만하면됩니다.

label1_Click(sender, e)

관련 문제