IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

De vb6 à vb.net TextBox indexé


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Par défaut De vb6 à vb.net TextBox indexé
    Salut à tous!
    Je cherche à choisir un de mes 30 textbox nommé comme suit
    TextBox1,TextBox2...etc
    Voici un bout de code vb6 qui marche avec des TextBox(index) ou index = 1 to 30

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Case 0
    For i = 0 To 9
    If Text7(i).Text = "" Then Exit Sub
    Text7(i).Text = Hex(Left(Val(Text7(i).Text), 2)) & Hex(Right(Val(Text7(i).Text), 2))
    Next
    voici en vb.net ma nouvelle approche qui ne marche pas!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i = 0 To 9
    If Controls("TextBox" & i.ToString).Text = Nothing Then
    Controls("TextBox" & i.ToString).Text = "0000"
    Else
    ques-ce qui ne vas pas avec ceci
    If Controls("TextBox" & i.ToString).Text = Nothing Then
    ou
    If Controls("TextBox" & i.ToString).Text = "" Then
    suite du code
    endif

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 246
    Par défaut
    A part peut-être mettre Me.Controls, sinon le code me semble bon.

    Tu as quoi comme message d'erreur ?

  3. #3
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    A part peut-être mettre Me.Controls
    Non ca vient pas de ca, car il le rajoute auto.
    Et c'est sur que sans le descriptif de l'erreur, ca va etre dur.
    Moi, comme ca, je dirais que le chemin vers l'objet n'est pas correct ou entier (c'est l'erreur la plus courante)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Par défaut
    La référence d'objet n'est pas définie à une instance d'un objet.
    Il me propose de déclarer les textbox avec "As new" ce qui est déjà le cas
    Ou de tester la valeur null ou nothing

    Je viens d'essayer Me.Controls ....sans résultat.

    Es-ce correct ou pas d'appeler mon TextBox1.text comme ceci;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controls("TextBox" & i.tostring).text
    Y a t'il un autre façon?

  5. #5
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectCast(Me.Controls("TextBox" & i.ToString), TextBox).Text = "0000"

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Par défaut
    Nouveau message d'erreur qui dit imposible de convertir une valeur de type en bolean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If DirectCast(Me.Controls("TextBox" & i.ToString), TextBox)).Text = "" then 
    code....
    endif
     
    ou 
     
    If DirectCast(Me.Controls("TextBox" & i.ToString), TextBox)).Text is nothing then 
    code....
    endif
    ...une valeur de type textbox en bolean

  7. #7
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Je viens de tester et je n'ai aucun probleme de mon cote.
    Par contre, il y a une parenthese en trop vers la fin )

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Par défaut
    J'avais vue la parathèse...

    Par contre je crois que vb.net2010 a un problème à reconnaître mes textbox de vb.net 2005

    j'ai fais un test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim data1 as new textbox
    et ça semble ok.
    Je vais refaire mes textbox pour voir. Je vous reviens.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Par défaut
    J'ai parti un nouveau projet et mon code de départ fonctionne comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
    For i = 1 To 5
    Controls("TextBox" & i.ToString).Text = i 
    Next
    Je ne vois toujour pas pourquoi il ne le prend pas dans mon projet initial?
    Mais bon, je vais tenter de copier le plus que possible dans le nouveau et tenter de voir ou l'erreur se produit.

    Merci à tous

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    bonjour,
    à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            '*** Parcourt le contrôle conteneur.
            '    "OfType" permet de préciser le type de contrôle à traiter.
            For Each tbx As TextBox In Me.Controls.OfType(Of TextBox)() 'ou tout autre conteneur de contrôles 
                For i As Integer = 1 To 9
                    If tbx.Name = ("TextBox" & i.ToString) AndAlso tbx.Text = "" Then
                        Controls("TextBox" & i.ToString).Text = CStr(i)
                    End If
                Next
            Next

  11. #11
    Membre confirmé
    Profil pro
    Ostéopathe
    Inscrit en
    Juillet 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ostéopathe

    Informations forums :
    Inscription : Juillet 2010
    Messages : 26
    Par défaut
    Juste pour info, tu as combien de TextBox au total ?

    Parce que si tu n'en as que 9 il y a forcément une erreur car le For va en rechercher 10

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    j'ai 3 textbox et je fais tourner 9 fois sans message d'erreur, mon code ci dessus.
    Normal, ne trouvant pas de textbox4...5..6...etc, le "if "renvoie "end if" immédiatement.
    Ce n'est pas très heureux.
    Le code si dessous est optimisé, donne une référence à l'objet et reprend le bout de code de la question de fred :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            For Each tbx As TextBox In Me.Controls.OfType(Of TextBox)() 'ou tout autre conteneur de contrôles 
                For i As Integer = 1 To Me.Controls.OfType(Of TextBox)().Count
                    If Controls("TextBox" & i.ToString).Text = "" Then
                        Controls("TextBox" & i.ToString).Text = CStr(i)
                    End If
                Next
            Next

  13. #13
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    @fredlefou :

    ne pas le prendre mal, mais arrête de coder, il te manque les bases et tu vas coder n'importe quoi

    lis donc un tuto comme celui ci : http://plasserre.developpez.com/cours/vb-net/
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre confirmé
    Profil pro
    Ostéopathe
    Inscrit en
    Juillet 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ostéopathe

    Informations forums :
    Inscription : Juillet 2010
    Messages : 26
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonjour,
    j'ai 3 textbox et je fais tourner 9 fois sans message d'erreur, mon code ci dessus.
    Normal, ne trouvant pas de textbox4...5..6...etc, le "if "renvoie "end if" immédiatement.
    Ce n'est pas très heureux.
    Le code si dessous est optimisé, donne une référence à l'objet et reprend le bout de code de la question de fred :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            For Each tbx As TextBox In Me.Controls.OfType(Of TextBox)() 'ou tout autre conteneur de contrôles 
                For i As Integer = 1 To Me.Controls.OfType(Of TextBox)().Count
                    If Controls("TextBox" & i.ToString).Text = "" Then
                        Controls("TextBox" & i.ToString).Text = CStr(i)
                    End If
                Next
            Next

    Salut chrismonoye
    Peux-tu m'éclairer

    Je ne vois pas l'optimisation du code car avec le For Each tu balaies l'ensemble des contrôles TextBox du conteneur, et avec le For Next tu fais aussi la même chose

    A vec la boucle For Each tu balaies l'ensemble des contrôles du formulaire, mais pour chaque contrôle trouvé par le For Each tu refais un balayage des contrôles du formulaire avec le For Next

    Utilises soit l'un soit l'autre mais pas les deux, tu fais l'inverse de l'optimisation....


    Ou je me suis gouré et là j'attends tes explications parce que ça peut m'intéresser...

  15. #15
    Membre confirmé
    Profil pro
    Ostéopathe
    Inscrit en
    Juillet 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ostéopathe

    Informations forums :
    Inscription : Juillet 2010
    Messages : 26
    Par défaut
    Citation Envoyé par Danyel Voir le message
    Non ca vient pas de ca, car il le rajoute auto.
    Et c'est sur que sans le descriptif de l'erreur, ca va etre dur.
    Moi, comme ca, je dirais que le chemin vers l'objet n'est pas correct ou entier (c'est l'erreur la plus courante)
    Je suis tout à fait d'accord avec Danyel sur l'origine de ton erreur

    Prenons un exemple. Tu as sur ta Form cinq TextBox : TextBox1, TextBox2, TextBox3, TextBox4, TextBox5
    Le code suivant ne plantera pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim incr As Integer
    For incr = 1 to 5
        MsgBox(Controls("TextBox" & incr).Text)
    Next
    Maintenant, tu fais des modifications sur ta Form et tu supprimes le TextBox3 parce que tu n'en as plus besoin. Le code précédent génèrera une erreur lorsqu'il cherchera à s'adresser à la propriété Text du contrôle TextBox3. Normal parce qu'il n'existe plus.

    Avant de t'adresser à une propriété de ton contrôle tu peux vérifier s'il existe. Ca te permet de supprimer toutes les erreurs de contrôles non trouvés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim incr As Integer
    For incr = 1 to 5
        If Controls.ContainsKey("TextBox" & incr) Then
            MsgBox(Controls("TextBox" & incr).Text)
        'Else
            'Le contrôle n'existe pas donc ne fait rien mais tu peux ajouter un code qui gère l'absence de contrôle auquel tu t'adresses
        End If
    Next
    Si ça ne résout pas ton problème, peux-tu reposer ton problème en précisant :
    • ce que tu cherches à faire
    • ce que fait ton code
    • l'erreur qui est levée
    • la ligne précise de ton code où se situe l'erreur


    Parce que apparemment on galère tous car tu nous présentes un bout de code qui objectivement dans certains contextes ne peux que marcher et dans d'autres ne peut que foirer.
    Plus tu seras précis dans ta description plus on pourra comprendre ton problème et y répondre.

  16. #16
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    @fredlefou :
    ne pas le prendre mal, mais arrête de coder, il te manque les bases et tu vas coder n'importe quoi
    Bonsoir,
    je suis sur que votre langue a fourchée,
    Un cinq étoile ne peut pas dire cela.
    Je vous lis depuis 2006, mon métier et mes formations n'ayant rien à voir avec la programmation, j'ai beaucoup appris comme cela sur le tas et pour le plaisir à votre contact.
    Alors " non pas vous".
    mrtrempo, je vous répondrai prochainement.

  17. #17
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonsoir,
    je suis sur que votre langue a fourchée,
    Un cinq étoile ne peut pas dire cela.
    Je vous lis depuis 2006, mon métier et mes formations n'ayant rien à voir avec la programmation, j'ai beaucoup appris comme cela sur le tas et pour le plaisir à votre contact.
    Alors " non pas vous".
    mrtrempo, je vous répondrai prochainement.

    en manque de nicotine je veux bien croire ! mais le sens est peut etre là quand même
    venant de vb6 j'ai écris des trucs dans le genre du créateur du topic, mais avec le recul, c'est pas le genre de chose à écrire, et le tuto de mr lasserre est plutot efficace
    (si vous me lisez depuis 2006 vous avez du me voir renvoyer vers ce tuto des milliers de fois !? vous avez du aussi voir que je ne suis pas toujours [politiquement] correct)
    et 5 étoiles ne veut rien dire de spécial hormis que je réponds souvent le lien de mr lasserre ^^

    enfin pour résumer, apprendre sur le tas ne veut pas dire improviser
    si pour apprendre à piloter un avion tu rentrais dans le cockpit et que tu appuyais sur tous les boutons, ca serait plutot dangereux
    donc potasser avant de se lancer reste le plus efficace ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    bonsoir mrtrampo
    je pars du postulat de la question posée à savoir, j'ai x textbox et à chaqu'une d'elles et pour simplifier : si textbox est 1 son texte doit afficher "1", puis la 2 affiche "2" etc...
    Pour tester sur un form, j'ai mis 6 ctrl différents dont 3 textbox.
    Ma boucle "for each" ne fait que 3 tours et la boucle "for" idem.
    C'est le nombre de textbox.
    un "OfType" change tout en terme de boucle.
    Par contre vous avez raison, si un textbox est supprimé ça plante.
    Alors j'en reviens à ma première intuition du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            For Each tbx As TextBox In Me.Controls.OfType(Of TextBox)() 'ou tout autre conteneur de contrôles 
                For i As Integer = 1 To Me.Controls.OfType(Of TextBox)().Count
                    If tbx.Name = ("TextBox" & i.ToString) AndAlso tbx.Text = "" Then
                        tbx.Text = CStr(i)
                    End If
                Next
            Next
    Dans l'attente, bonne nuit.

  19. #19
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Oui Pol63 en relisant "mon" code, ça me plaisait pas et en répondant à mrtrampo, je l'ai utilisé ma variable.
    Ce code VB6 m'a emmerdé un bout de temps et je suis comme toi, la cigarette c'est ....
    Ciao

  20. #20
    Membre confirmé
    Profil pro
    Ostéopathe
    Inscrit en
    Juillet 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ostéopathe

    Informations forums :
    Inscription : Juillet 2010
    Messages : 26
    Par défaut
    Ah j'ai compris

    Un moyen d'optimiser le code à ce moment là balayer tous les contrôles TextBox et à chaque fois lui donner le numéro correspondant à son nom mais en allant chercher ce numéro directement dans le nom (sans fair la boucle For)

    Ca ferait un truc dans le style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each tbx As TextBox In Me.Controls.oftype(Of TextBox)()
        If tbx.Text = "" Then
            tbx.Text = Strings.Mid(tbx.Name, 8) '8 correspond à Len("TextBox") + 1
        End If
    Next
    Chez moi le OfType n'est pas reconnu. Il n'est pas membre de Controls

Discussions similaires

  1. [VB.net] TextBox dans Repeater
    Par TekP@f dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/05/2005, 13h38
  2. [vb.net][textbox] Avoir un value field et un display field
    Par graphicsxp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/04/2005, 17h59
  3. [VB.NET] Textbox -> seulement des chiffres sans API?
    Par Pleymo dans le forum Windows Forms
    Réponses: 10
    Dernier message: 25/04/2005, 14h00
  4. [VB.NET] Migration VB6---VB.NET
    Par billyyy dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/01/2005, 15h30
  5. [VB6] [Interface] ScrolBar & TextBox
    Par DarkVader dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/10/2002, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo