Probleme label dynamique [Résolu]

Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
- - Dernière réponse : cs_ShayW
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
- 3 nov. 2011 à 23:13
Bonsoir,

Je souhaite créer un nombre de label suivant le nombre de valeurs (En l'occurence des acteurs)renvoyé par ma base de données.
Le problème c'est pour positionner ces label dans mon FRM.(ils se chevauchent)
Voici mon code :

Do While (reader_nom.Read) And (reader_prenom.Read)
Dim monlabel = New LinkLabel
act_nom = reader_nom.GetString(0)
act_prenom = reader_prenom.GetString(0)
monlabel.Name = "label_act" + CStr(i)
monlabel.Text = act_nom + " " + act_prenom + "'"
frm_film.Controls.Add(monlabel)
monlabel.AutoSize = True
localisation_original_x = localisation_original_x + monlabel.Size.Width
//represente la localisation en X de mon label "acteur :" permanent
monlabel.Location = New Point( localisation_original_x + 10, 266)
frm_film.Controls.Add(monlabel)
i = i + 1
Loop
Le problème c'est que "monlabel" n'a pas encore était crée en tant que
label c'est pourquoi je pense que "monlabel.Size.Width" ne me renvoi pas la valeur souhaité

En espérant que vous puissiez m'aider ( et que explication soit comprehensible ^^)
Cordialement,

thomas
Afficher la suite 

20/21 réponses

Meilleure réponse
Messages postés
14500
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 juillet 2019
131
3
Merci
Bonjour,

Quand tu postes un code, regardes le point 2 de ma signature.

Sinon, tu peux tenter un DoEvents, moche et peu performant, mais peut fonctionner.

Sinon, pourquoi 2 Readers pour le noms et les prénoms ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
46
3
Merci
Salut

Le problème c'est que "monlabel" n'a pas encore était crée en tant que
label c'est pourquoi je pense que "monlabel.Size.Width" ne me renvoi pas la valeur souhaité


quand tu écris
Dim monlabel = New LinkLabel 

il a bien été crée
quelle valeur a monlabel.Size.Width
disons le premier dans ta boucle

j'ai essayé de placer 3 linklabels ils ne sont
pas chevauchés

Private Sub test()
    Dim x As Integer
    x = 100
    For iter = 0 To 2
        Dim malabel As New LinkLabel
        malabel.AutoSize = True
        malabel.Font = New Font("arial", 12, FontStyle.Bold)
            malabel.TextAlign = ContentAlignment.TopCenter
            malabel.Name = "ma" & iter.ToString
            malabel.Text = "www" & iter.ToString
            malabel.Location = New Point(x, 400)
            Me.Controls.Add(malabel)
            x += malabel.Width
            malabel.Visible = True
            AddHandler malabel.MouseDoubleClick, AddressOf malabelmouseclick

        Next

    End Sub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_ShayW
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
Désolé pour le code je suis nouveau sur le site !

Merci pour votre réponse je vais apprendre le fonctionnement de doevent et voir si cela me convient !

Pour les 2 reader, cela fait une semaine que je découvre le vb.net et je ne sais pas comment récupérer les deux valeur a la ligne 0 dans une seul variable !?!
Commenter la réponse de tomreizorb
0
Merci
Bonsoir,
En création dynamique d'un label, .AutoSize doit être placé avant .Text afin que la largeur du contrôle s'adapte au texte.
Bonne nuit.
Commenter la réponse de Utilisateur anonyme
0
Merci
Et la ligne frm_film.Controls.Add(monlabel) apparaît 2 fois.
Commenter la réponse de Utilisateur anonyme
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
Merci j'avais essayer de déplacer cette ligne pour effectuer des tests et j'ai oublier de l'enlever en haut !
Je vais tester pour le .autosize
merci encore !
Commenter la réponse de tomreizorb
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
Le .autosize avant le .text ne resoud pas mon probleme de chevauchement.
Il faudrait que je puisse recuperer le size de mon nouveau label creé ce qui me parrait impossible
Commenter la réponse de tomreizorb
0
Merci
Donc le chevauchement est dû à ton code.
Place des points d'arrêts (F9 sur la ligne sélectionnée) et exécute en pas à pas (F8) et promène ta souris sur les parties de code à vérifier.
Lorsqu'un point d'arrêt est placé, sers toi aussi de la fenêtre exécution en tapant par exemple :
?localisation_original_x

Bonne nuit.
Commenter la réponse de Utilisateur anonyme
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
Ça marche Chaque label s'affiche et ne se chevauche plus il me reste juste a réduire l'espace entre ces différents labels.
Le problème venait du faite que je n'ajoutais pas ça:
x += malabel.Width

Merci encore

Bonne nuit à vous !

Cordialement,

thomas
Commenter la réponse de tomreizorb
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
Rebonjour,

J'ain de nouveau un petit soucis pour récupérer la valeur de mon label dynamiquement crée pour pouvoir exécuter un code événementiel sur le "onclick"

 acteur = Split(Me.Text, " ")
 act_nom = acteur(0).ToString.ToUpper
 act_prenom = acteur(1).ToString.ToUpper


Que doit-je mettre a la place de x pour récupérer cette valeur ?( ça doit être un truc du genre "this" )

Merci d'avance !
Commenter la réponse de tomreizorb
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
Désolé j'ai pas mit "x" mais "me"
Commenter la réponse de tomreizorb
Messages postés
14500
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 juillet 2019
131
0
Merci
Bonjour,

Sans plus de précision (dans quel conteneur se trouve le code), Me désigne la Form.
Si tu veux utiliser le Label, mets son nom à l place de Me.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
46
0
Merci
Salut

pas compris
tu as plusieurs linklabel dont chacun
recoit les données de ta BDD
que veux tu faire ensuite ?
Commenter la réponse de cs_ShayW
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
je créer des label dynamiquement représentant les acteur de mon film (Frm_film)
Ensuite je créer un événement sur ces label pour que lorsque je clique dessus je récupère les donnée de label.text ( Acteur nom et prénom) et je vais chercher le reste des données de l'acteur dans ma base grâce au nom et prénom que j'envoie ensuite sur FRM_acteur.
C'est pourquoi je souhaite faire label.text.
Seulement comme il n'est pas encore crée, je ne sais pas comment m'y prendre !
Commenter la réponse de tomreizorb
Messages postés
14500
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 juillet 2019
131
0
Merci
Bonjour,

Si tu as déjà créé tes labels et abonné leurs événements, utilises le paramètre Senser pour savoir qui a générer l'événement.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
Comment cela fonctionne t-il ?
Commenter la réponse de tomreizorb
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
46
0
Merci
Private nomprenom() As String

Do While (reader_nom.Read) And (reader_prenom.Read)
.......
......
frm_film.Controls.Add(monlabel) 

toute le reste
et definir mouseclick event 
AddHandler malabel.MouseClick, AddressOf malabelmouseclick
Loop 

Private Sub malabelmouseclick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        
        If TypeOf (sender) Is LinkLabel Then
            nomprenom = DirectCast(sender, LinkLabel).Text.Split(" ")
        End If

    End Sub

tu te sers de nomprenom(0) pour le nom
et nomprenom(1) pour le prenom


A propos pourquoi tu te sers de linklabel
tu ne fais pas de link à un site
Commenter la réponse de cs_ShayW
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
46
0
Merci
plutot

Private nomprenom() As String

Do While (reader_nom.Read) And (reader_prenom.Read)
.......
......
frm_film.Controls.Add(monlabel) 

toute le reste
'et definir mouseclick event 
AddHandler malabel.MouseClick, AddressOf malabelmouseclick
Loop 

Private Sub malabelmouseclick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        
        If TypeOf (sender) Is LinkLabel Then
            nomprenom = DirectCast(sender, LinkLabel).Text.Split(" ")
        End If

    End Sub
Commenter la réponse de cs_ShayW
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
J'utilise linklabel car les propriété cursor change automatiquement. je ne savais pas que c’était dédiés au siteweb

En tous cas je te remercie pour le code que tu m'a donné je test ça et je te tiens au courant !

Cordialement,

thomas
Commenter la réponse de tomreizorb
Messages postés
24
Date d'inscription
mercredi 2 novembre 2011
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
Votre code marche avec perfection !
Merci mille fois !

Cordialement,

thomas
Commenter la réponse de tomreizorb