2015-01-06 4 views
0

여러 텍스트 상자와 콤보 상자가 포함 된 양식이 있습니다. 액티브 컨트롤의 하늘색 속성을 하늘색으로 설정했습니다. 모든 텍스트 상자 및 콤보 상자의 백 색을 흰색으로 설정하고 액티브하지 않습니다.비활성 컨트롤의 BackColor를 설정하는 방법

+0

포커스가 설정되지 않았거나 사용 가능 = false로 설정되어 있습니까? – Monah

답변

1

올바른 방법이 있으며 잘못된 방법으로이 작업을 수행하려면입니다. 당신은 잘못된 길을 요구하고 있습니다. 올바른 방법은 TextBox에서 클래스를 파생시키고 OnEnter 및 OnLeave 메서드를 재정의하는 것입니다. ComboBox에 대해 반복하십시오.

하지만 잘못된 길을 물어 보면이 기능을 너무 늦게 추가하려고 할 것이므로 런타임에 컨트롤을 다시 찾아야합니다. 폼 클래스에 생성자를 추가하고 다음과 같이 만듭니다.

Public Sub New() 
    InitializeComponent() 
    FindControls(Me.Controls) 
End Sub 

Private Sub FindControls(ctls As Control.ControlCollection) 
    For Each ctl As Control In ctls 
     Dim match As Boolean 
     If TypeOf ctl Is TextBoxBase Then match = True 
     If TypeOf ctl Is ComboBox Then 
      Dim combo = DirectCast(ctl, ComboBox) 
      If combo.DropDownStyle <> ComboBoxStyle.DropDownList Then match = True 
     End If 
     If match Then 
      AddHandler ctl.Enter, AddressOf ControlEnter 
      AddHandler ctl.Leave, AddressOf ControlLeave 
     End If 
     FindControls(ctl.Controls) 
    Next 
End Sub 

Private controlColor As Color 

Private Sub ControlEnter(sender As Object, e As EventArgs) 
    Dim ctl = DirectCast(sender, Control) 
    controlColor = ctl.BackColor 
    ctl.BackColor = Color.AliceBlue 
End Sub 

Private Sub ControlLeave(sender As Object, e As EventArgs) 
    Dim ctl = DirectCast(sender, Control) 
    ctl.BackColor = controlColor 
End Sub 
+0

컨트롤을 파생시키지 않고'FindControl'을 사용하지 않고 원하는 컨트롤에 대해'Enter' 및'Leave' 이벤트에 이벤트 핸들러를 추가하는 것으로 충분하지 않습니까? 생성자에서 예를 들어 – Fabio

+0

물론. 그것은 오류가 발생하기 쉬운 방법입니다. –

+0

죄송합니다. 오류가 발생하는 이유는 무엇입니까? 이 단점은 무엇입니까? (단 하나 제외 : 모든 양식에서 동일한 동작이 필요한 경우 프로젝트의 모든 양식에 이벤트 처리기를 추가해야 함)). – Fabio

관련 문제