2010-06-18 7 views
1

J'ai créé un contrôle personnalisé et ajouté une propriété label afin que nous puissions choisir un Label et l'assigner à ce contrôle au moment du design. donc en gros je veux que si une étiquette est affectée à ce contrôle, le texte devrait changer comme ci-dessous ainsi que son texte devrait changer de caractères gras, voici donc ce code:Impossible de modifier le texte de l'étiquette!

private Label assignedLabel; 
public Label AssignedLabel 
{ 
    get 
    { 
     return assignedLabel; 
    } 
    set 
    { 
     assignedLabel = value; 
     assignedLabel.Text = @"*" + assignedLabel.Text; 
     assignedLabel.Font = new Font(AssignedLabel.Font, FontStyle.Bold); 
     AssignedLabel.Refresh(); 
    } 
} 

le problème est que sur la base le code au-dessus de la police de cette étiquette affectée passe correctement en police Gras, mais son texte ne prend pas effet. pourquoi cela se passe-t-il? comment puis-je résoudre ce problème?

+1

Je n'arrive pas à reproduire votre problème. Etes-vous sûr d'exécuter ce code sur le thread de l'interface utilisateur? Si non, des choses imprévisibles peuvent arriver ... –

Répondre

0

Il semble vraiment que vous devriez explorer DataBinding. C'est parfait pour manipuler les internes de la mise à jour d'une étiquette basée sur l'état d'un autre contrôle.

Par exemple, si vous avez deux contrôles, une zone de texte (TextBox1) et une étiquette (LABEL1), vous pouvez appeler la ligne de code suivante à chaque fois que vous voulez les lier:

label1.DataBindings.Add("Text", textBox1, "Text"); 

Cela lie la Propriété "Text" de label1 à la propriété "Text" de l'objet textBox1. Vous pouvez utiliser n'importe quel objet ici. La façon «correcte» de le faire serait de créer une source de données sous-jacente qui contient l'état actuel de nombreuses variables et de lier tous les contrôles à cette source de données. Mais ce type de code vous permettra d'aller vite.

+0

merci, plus d'explications s'il vous plaît :) – Bohn

+1

A donné un exemple rapide, laissez-moi savoir si vous avez besoin de plus. – drharris

+0

merci, je pense à tirer parti de cette technique dans ma question mais j'ai beaucoup appris de cet exemple. c'est une belle façon de mettre à jour les contrôles basés sur le changement d'autre contrôle juste avec une ligne de code .. sympa, je devrais étudier plus en plus ça, c'est puissant. – Bohn

1

Je ne pense pas que vous pouvez le faire à moins qu'il ne soit défini dans le sous-programme InitializeComponent() pour le contrôle.

En fait, la police est-elle définie par défaut avant de la modifier?

+0

mais pourquoi je pourrais changer la police en gras, mais ne peut pas changer son texte? – Bohn

+1

J'ai mis à jour ma réponse. Assurez-vous que vous définissez une police par défaut avant de la modifier par programme. –

+0

police était Ok ... depuis que je lis dans AssignedLabel.Font et puis indépendamment de ce que c'est jamais, je suis juste en train de le rendre gras – Bohn

0

Hmmm! le code vient de commencer à fonctionner! Il y a un problème mineur qui est d'ajouter "*" à chaque fois que je lance le formulaire, mais cela devrait être une solution facile. tout autre moyen agréable d'atteindre cet objectif sont les bienvenus :) merci à tous.

+1

vous voulez dire le "*" + assignedLabel.Text? –

+0

oui ... correct. – Bohn

Questions connexes