Probleme label dynamique

Résolu
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012 - 2 nov. 2011 à 22:07
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 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

21 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
2 nov. 2011 à 23:30
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
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 nov. 2011 à 00:35
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
3
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
2 nov. 2011 à 23:38
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 !?!
0
Utilisateur anonyme
2 nov. 2011 à 23:44
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
2 nov. 2011 à 23:46
Et la ligne frm_film.Controls.Add(monlabel) apparaît 2 fois.
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
2 nov. 2011 à 23:49
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 !
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
3 nov. 2011 à 00:00
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
0
Utilisateur anonyme
3 nov. 2011 à 00:10
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.
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
3 nov. 2011 à 00:43
Ç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
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
3 nov. 2011 à 19:24
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 !
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
3 nov. 2011 à 19:25
Désolé j'ai pas mit "x" mais "me"
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 nov. 2011 à 19:42
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 nov. 2011 à 19:47
Salut

pas compris
tu as plusieurs linklabel dont chacun
recoit les données de ta BDD
que veux tu faire ensuite ?
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
3 nov. 2011 à 20:05
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 !
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 nov. 2011 à 20:33
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
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
3 nov. 2011 à 20:43
Comment cela fonctionne t-il ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 nov. 2011 à 20:46
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 nov. 2011 à 20:52
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
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
3 nov. 2011 à 22:27
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
0
tomreizorb Messages postés 24 Date d'inscription mercredi 2 novembre 2011 Statut Membre Dernière intervention 12 avril 2012
3 nov. 2011 à 22:48
Votre code marche avec perfection !
Merci mille fois !

Cordialement,

thomas
0
Rejoignez-nous