Référence d'objet d'un label en VB??

Youp!! -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

Je suis en train de réaliser un petit utilitaire en VB sur visual 2005.
A un moment j'ai besoin de remplir plusieurs label en fonction d'un test, j'ai alors utilisé le code suivant :

If resultat(i) = reponse(i) Then
score += 1
Me.Controls("Label" & i).Text = "Vrai"
Else : Controls("Label" & i).Text = "Faux"
End If

Le If fait partie d'une boucle qui incrémente i et réalise d'autres actions.
Le problème vient du fait que lors de l'éxécution, j'ai l'erreur suivante qui apparait en sélectionnant la ligne Me.Control... :
"La référence d'objet n'est pas définie à une instance d'un objet."

Et après plusieurs recherches je ne vois toujours pas d'où cela provient.

Vous auriez une idée?
Merci et Bonne soirée

1 réponse

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    En faisant une collection de tes label...
    Public Class Form1  
        Private Collect As New Microsoft.VisualBasic.Collection()  
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
            Dim LB As Control  
            For Each LB In Me.Controls  
                If TypeOf LB Is Label Then  
                    Collect.Add(LB, LB.Tag)  
                End If  
            Next LB  
            'Exemple d'emploi....  
            Dim i As Integer  
            For i = 1 To 4  
                Collect(CStr(i)).text = "Texte " & i  
            Next  
            '---------------------------  
        End Sub  
    End Class

    Mettre les N° des index dans le Tag des contrôles.
    Attention : les clés de la collection doivent êtres en string.

    A+
    Et pour ton cas ça deviendrait...
            If resultat(i) = reponse(i) Then 
                score += 1 
                Collect(CStr(i)).Text = "Vrai" 
            Else : Collect(CStr(i)).Text = "Faux" 
            End If

    Ou une autre façon qui pourrait t'apprendre quelque autre fonctions.
            Dim P As Single
            P = (resultat(i) = reponse(i))
            Score += Math.Abs(P)
            Collect(CStr(i)).Text = IIf(P, "Vrai", "Faux")


    Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
    1