0
votes

Changer le texte de l'étiquette avec des contrôles dans VB

J'essaie de changer de texte d'étiquettes avec la commande Controls, à l'aide de cette ligne xxx

mais je reçois cette erreur

"Système.NullReferenceException" >

Si je supprime cette étiquette et modifiez-la pour une zone de texte (avec le même nom "c_0"), cela fonctionne! Mais j'ai besoin de le faire avec une étiquette non pas une zone de texte ...

textlabel nommé "C_0"

 Entrez la description de l'image ici


3 commentaires

Ne peut pas reproduire. J'ai créé l'étiquette l_0 , textbox t_0 et cocher c_0 et utilisé ce code: Contrôles ("L_" & 0) .Text = "CONTA:" Contrôles ("T_" & 0) .Text = "Conta:" Contrôles ("C_" & 0) .Text = "Conta:" Conta: "Conta: " et toutes les propriétés de texte des commandes ont été définies. Vous devez soit pas avoir ce contrôle, soit vous avez une faute de frappe. En outre, n'utilisez pas la concaténation de chaîne & sur un entier. Utilisez une interpolation ou une interpolation de chaîne.


Vous pouvez également afficher tous les noms de vos étiquettes dans une MessageBox: MessageBox.show (string.join (",", contrôle.oftype (de l'étiquette) .Sélectionnez (Fonction (L) L.Name))) pour confirmer que vous l'avez réellement.


Jetez un coup d'œil sur les photos que j'ai ajoutées ... Hmm, je vais jeter un coup d'œil dans une interpolation à la chaîne! Merci MessageBox.show (string.join (",", contrôle.oftype (de Label) .Sélectionnez (fonction (L.Name L.Name))) Affiche une boîte de messagerie vierge pour moi !!!


3 Réponses :


1
votes

Ceci est parce que vous n'avez pas de contrôle nommé c_0 code>. Je suggérerais d'utiliser ControlCollection.Find Pour obtenir votre contrôle, puis utilisez une instruction conditionnelle si l'instruction de vérification si le contrôle renvoyé existe:

Me.Controls.Find("C_" & 0, True).First().Text = "Conta:"


1 commentaires

Ok gars, je pense que je trouve le problème ... J'ai fait une nouvelle étiquette nommée C_0 et cela a fonctionné !!! L'ancien label n'a pas ... Je ne sais pas pourquoi ... peut-être que c'est corrompu?



0
votes

OK, je trouve le problème ... Cette commande ne fonctionnait pas car elle était dans une boîte de groupe.

Le code droit est alors xxx

merci pour Tout le monde aide!


3 commentaires

Si vous utilisez le code que j'ai fourni, cela ne serait pas un problème en raison de la méthode ControlCollection.Find Méthode Paramètre .


C'est vrai, j'essaie de rendre cela aussi court que possible. Merci beaucoup.


Si vous voulez vraiment une solution à une doublure, vérifiez mon édition.



0
votes

Votre problème est Control.Controls renvoie uniquement les commandes directement à l'intérieur du contrôle. Vous pouvez donc utiliser ces méthodes d'extension. Mettez ceci dans un module:

' general option to return all controls, filter on name
Me.ChildControls().Single(Function(c) c.Name = "C_" & 0)).Text = "Conta:"

' generic option to return only Labels, filter on name
Me.ChildControls(Of Label)().Single(Function(c) c.Name = "C_" & 0)).Text = "Conta:"


0 commentaires