none
Comment faire pour ne pas répéter plusieurs fois un code qui se ressemble? RRS feed

  • Question

  • Bonjour

    Ma question n'est pas très explicite. Cet exemple en dira plus long : Sur une form il y a 9 TextBox dont je dois contrôler le contenu. Comment créer un sub qui prendrait en argument le TextBox d'origine de l'évènement (ici leave) en cours et retournerait le comportement adéquat (mettre en rouge ou vert)..? 

      Private Sub Box7_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Box7.Leave
        If Not String.IsNullOrEmpty(Box7.Text) Then
          If Box7.Text = Nb7.ToString Then
            Box7.ForeColor = Color.YellowGreen
          Else
            Box7.ForeColor = Color.Red
            Beep()
          End If
        End If
      End Sub
    
      Private Sub Box8_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Box8.Leave
        If Not String.IsNullOrEmpty(Box8.Text) Then
          If Box8.Text = Nb8.ToString Then
            Box8.ForeColor = Color.YellowGreen
          Else
            Box8.ForeColor = Color.Red
            Beep()
          End If
        End If
      End Sub
    
      Private Sub Box9_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Box9.Leave
        If Not String.IsNullOrEmpty(Box9.Text) Then
          If Box9.Text = Nb9.ToString Then
            Box9.ForeColor = Color.YellowGreen
          Else
            Box9.ForeColor = Color.Red
            Beep()
          End If
        End If
      End Sub
    

    Merci

    pascal


    Cordialement Pascal http://www.scalpa.info
    samedi 12 mars 2011 12:09

Réponses

  • > Bonjour
    >
    > Ma question n'est pas très explicite. Cet exemple en dira plus long : Sur
    > une form il y a 9 TextBox dont je dois contrôler le contenu. Comment créer
    > un sub qui prendrait en argument le TextBox d'origine de l'évènement (ici
    > leave) en cours et retournerait le comportement adéquat (mettre en rouge ou
    > vert)..?
    > [code]
    >
        Private Sub Box_Leave(ByVal sender As Object, ByVal e As
    System.EventArgs) _
        Handles Box1.Leave, Box2.Leave, Box3.Leave etc ...
        Dim box as Textbox = sender
        Select case box.Name
        Case "box1" : ...
        Case "box2" : ...
        ...
        End Select
     On peut éviter le Select Case mais il faut trouver un moyen de faire le
    lien entre le nom du TextBox et la variable utilisée N1, N2, etc ...
     Un tableau serait approprié
     
    --
    Fred
    foleide@free.fr
     
    • Marqué comme réponse scalpa samedi 12 mars 2011 12:47
    samedi 12 mars 2011 12:46
  • Ah oui d'accord, j'ai compris !
    Private Sub Box_Leave(ByVal sender As Object, ByVal e As System.EventArgs) _
      Handles Box1.Leave, Box2.Leave, Box3.Leave, _
          Box4.Leave, Box5.Leave, Box6.Leave, _
          Box7.Leave, Box8.Leave, Box9.Leave
    
        Dim box As TextBox = sender
    
        If Not String.IsNullOrEmpty(box.Text) Then
          
          If box.Text = Nb(box.Tag - 1).ToString Then
            box.ForeColor = Color.YellowGreen
            ReponseRestant += 1
            If ReponseRestant = 6 Then
              PartieGagne()
            End If
          Else
            box.ForeColor = Color.Red
            Beep()
          End If
    
        End If
    
      End Sub
    

    Au lieu de créer 9 variables integer Nb1, Nb2 etc. il fallait déclarer un tableau de variables Nb(8).

    Merci pour l'idée.

     


    Cordialement Pascal http://www.scalpa.info
    • Marqué comme réponse scalpa samedi 12 mars 2011 13:18
    samedi 12 mars 2011 13:17

Toutes les réponses

  • > Bonjour
    >
    > Ma question n'est pas très explicite. Cet exemple en dira plus long : Sur
    > une form il y a 9 TextBox dont je dois contrôler le contenu. Comment créer
    > un sub qui prendrait en argument le TextBox d'origine de l'évènement (ici
    > leave) en cours et retournerait le comportement adéquat (mettre en rouge ou
    > vert)..?
    > [code]
    >
        Private Sub Box_Leave(ByVal sender As Object, ByVal e As
    System.EventArgs) _
        Handles Box1.Leave, Box2.Leave, Box3.Leave etc ...
        Dim box as Textbox = sender
        Select case box.Name
        Case "box1" : ...
        Case "box2" : ...
        ...
        End Select
     On peut éviter le Select Case mais il faut trouver un moyen de faire le
    lien entre le nom du TextBox et la variable utilisée N1, N2, etc ...
     Un tableau serait approprié
     
    --
    Fred
    foleide@free.fr
     
    • Marqué comme réponse scalpa samedi 12 mars 2011 12:47
    samedi 12 mars 2011 12:46
  • Merci pour ta réponse. Mais effectivement, tu as raison, à cause des neuf selectcase , le code n'est pas tellement plus "élégant"...

    Par contre, je  n'ai pas très bien compris l'histoire du tableau qui permettrait de me passer du selectcase..

     


    Cordialement Pascal http://www.scalpa.info
    samedi 12 mars 2011 13:07
  • Ah oui d'accord, j'ai compris !
    Private Sub Box_Leave(ByVal sender As Object, ByVal e As System.EventArgs) _
      Handles Box1.Leave, Box2.Leave, Box3.Leave, _
          Box4.Leave, Box5.Leave, Box6.Leave, _
          Box7.Leave, Box8.Leave, Box9.Leave
    
        Dim box As TextBox = sender
    
        If Not String.IsNullOrEmpty(box.Text) Then
          
          If box.Text = Nb(box.Tag - 1).ToString Then
            box.ForeColor = Color.YellowGreen
            ReponseRestant += 1
            If ReponseRestant = 6 Then
              PartieGagne()
            End If
          Else
            box.ForeColor = Color.Red
            Beep()
          End If
    
        End If
    
      End Sub
    

    Au lieu de créer 9 variables integer Nb1, Nb2 etc. il fallait déclarer un tableau de variables Nb(8).

    Merci pour l'idée.

     


    Cordialement Pascal http://www.scalpa.info
    • Marqué comme réponse scalpa samedi 12 mars 2011 13:18
    samedi 12 mars 2011 13:17
  • Bonsoir..!

    Un petit truc en passant: tagez vos controles comme on indexait (au temp jadis) puis identifiez l'appelant avec

    var=sender.tag

    cela facilite le tri

    mercredi 13 avril 2011 15:56