2010-07-23 1 views
0

나는 다음과 같은 코드가 있습니다응축 vb.net 코드

Private Sub txtFileFromLocation_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) 
    MachineNameUIDisabled() 
    ServiceNameUIDisabled() 
    ToLocationUIDisabled() 
    btnSubmitUIDisabled() 
    lblStatusClear() 
    End Sub 

    Private Sub txtMachineName_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) 
    ServiceNameUIDisabled() 
    ToLocationUIDisabled() 
    btnSubmitUIDisabled() 
    lblStatusClear() 
    End Sub 

    Private Sub txtServiceName_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) 
    ToLocationUIDisabled() 
    btnSubmitUIDisabled() 
    lblStatusClear() 
    End Sub 


    Private Sub txtFilesToLocation_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) 
    btnSubmitUIDisabled() 
    lblStatusClear() 
    End Sub 

생각

내가 (모든 서브 현재 btnSubmitUIDisabled()lblStatusClear()을 보유) 어떤 반복 코드를 필요없이 하나 개의 하위에이 통합을 찾고를 약 CASE 문장이지만 반복적 인 코드도 있습니다. 이것은 WPF 응용 프로그램이며 모든 "TextChanged"이벤트는 xaml에 있으므로 각 하위 끝에 "핸들"이 없습니다.

미리 감사드립니다. 방법이 오히려 그것이 무엇 반응하여보다는을 무엇을 말할 수 있도록 - -

Private Sub txtFileFromLocation_TextChanged(ByVal sender As Object, _ 
              ByVal e As TextChangedEventArgs) 
    MachineNameUIDisabled() 
    txtMachineName_TextChanged() 
End Sub 

Private Sub txtMachineName_TextChanged(ByVal sender As Object, _ 
             ByVal e As TextChangedEventArgs) 
    ServiceNameUIDisabled() 
    txtServiceName_TextChanged() 
End Sub 

Private Sub txtServiceName_TextChanged(ByVal sender As Object, _ 
             ByVal e As TextChangedEventArgs) 
    ToLocationUIDisabled() 
    txtFilesToLocation_TextChanged() 
End Sub 


Private Sub txtFilesToLocation_TextChanged(ByVal sender As Object, 
              ByVal e As TextChangedEventArgs) 
    btnSubmitUIDisabled() 
    lblStatusClear() 
End Sub 

나는 개인적으로 그 시점에서 다르게 이름을 것이지만 :

답변

4

그런데 한 가지 당신은 전화를 단계적으로 수 그것은 나 자신과 비주얼 스튜디오 사이의 오랜 의견 차이입니다.

+0

주황색 막대가 맨 위에 나타날 때 정확히 똑같은 것으로 "게시하십시오"를 클릭하려고했습니다 ... – Vedran

0

비주얼 베이직 남자로 그렇게 많이하지 의사 코드 :

Private Sub txt_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) 

    if (sender.Name = txtServiceName) 
    MachineNameUIDisabled() 

    if (sender.Name = txtServiceName or sender.Name = txtMachineName) 
    ServiceNameUIDisabled() 

    if (sender.Name = txtServiceName or sender.Name = txtMachineName or sender.Name = txtFileFromLocation) 
    ToLocationUIDisabled() 

    btnSubmitUIDisabled() 
    lblStatusClear() 
    End Sub 

꽤 안하지만 하나의 방법.

편집 : 언급하지 않은 한 가지는 텍스트 속성 유형을 가져올 수 있도록 보낸 사람을 텍스트 상자 형식으로 캐스팅하려는 것입니다.

0

모두 한 가지 방법으로 원한다면 @spinon 대답은 한 가지 방법입니다. 또 다른 방법은 작성해야하는 OrElse 문을 줄이기위한 확장 메서드를 작성하는 것이므로 코드를 좀 더 읽기 쉽게 만듭니다.

Private Sub txt_TextChanged(ByVal sender As Object, 
          ByVal e As TextChangedEventArgs 
          ) 

    Dim textBox = TryCast(sender, TextBox) 

    If textBox IsNot Nothing Then 

     If textBox.IsOneOf(txtServiceName) Then 
      MachineNameUIDisabled() 
     End If 

     If textBox.IsOneOf(txtServiceName, txtMachineName) Then 
      ServiceNameUIDisabled() 
     End If 

     If textBox.IsOneOf(txtServiceName, txtMachineName, txtFileFromLocation) Then 
      ToLocationUIDisabled() 
     End If 

     If textBox.IsOneOf(txtServiceName, txtMachineName, txtFileFromLocation, 
      txtFilesToLocation) Then 

      btnSubmitUIDisabled() 
      lblStatusClear() 

     End If 

    End If 

End Sub 

<Extension()> 
Public Function IsOneOf(ByVal value As Object, 
         ByVal ParamArray values() As Object 
         ) As Boolean 

    If value Is Nothing Then 
     Throw New ArgumentNullException("value") 
    End If 

    If values Is Nothing Then 
     Throw New ArgumentNullException("values") 
    End If 

    Return values.Contains(value) 

End Function