2010-10-12 26 views

Répondre

2

Je ne rendrais pas l'étiquette publique.

Il est préférable d'ajouter une méthode publique spécifique à l'affichage de l'étiquette et de la mettre à jour.

Par exemple, si votre étiquette était une étiquette « état du système », vous pouvez ajouter (à votre formulaire/UserControl):

public void SetStatusInformation(string currentStatus) 
{ 
    this.statusLabel.Text = currentStatus; 
} 

Cela vous permet, par la suite, de changer la façon dont cette information est affiché (dans le cas où vous souhaitez utiliser un contrôle différent), et simplifie également votre API, puisque les méthodes publiques sont très claires pour l'utilisateur.

1

c'est une mauvaise idée. WinForms laisse beaucoup "quelle est la meilleure façon de faire X?" questions ouvertes; et votre meilleure réponse est de suivre des modèles et des pratiques établies (qui ne sont pas spécifiques à WinForms).

Lit les modèles MVP ou MVC. Ce sont deux modèles de haut niveau qui se concentrent sur la séparation de votre code spécifique à l'interface utilisateur de votre logique métier. Sans cette séparation, votre application peut rapidement devenir un cauchemar de maintenance, et les choses qui devraient être simples deviennent beaucoup plus compliquées.

Pour votre scénario spécifique, vous obtiendrez probablement un modèle (votre logique métier) qui utilise la liaison de données pour afficher ses données sur l'écran WinForms. Lorsqu'une modification de l'interface utilisateur se produit, le modèle reçoit le changement et ce changement se propage à l'interface utilisateur via la liaison de données.

0

Je suggérerais d'envelopper dans une propriété ou une méthode setter car il est très possible que vous deviez faire quelque chose comme ajouter de la journalisation ou rappeler sur le thread principal de la fenêtre si l'appelant provient d'un autre. J'ai trouvé qu'il était plus facile de toujours utiliser du code comme celui-ci pour exposer des fonctionnalités qui permettent aux clients de mettre à jour n'importe quoi.

public void SetStart() 
    { 
     if (this.InvokeRequired) 
     { 
      this.Invoke((MethodInvoker)delegate() 
      { 
       this.SetStart(); 
      }); 
     } 
     else 
     { 
      progressBar1.Value = 0; 
      progressBar1.Visible = true; 
     } 
    } 
+0

Qu'en est-il de l'obtention, cela peut-il être dans une fonction? –

+0

Le problème se produit uniquement lorsque vous avez du code dans un autre thread essayez d'appeler quelque chose qui modifie l'apparence de votre fenêtre winforms. Vous saurez quand cela arrive parce qu'une exception est levée. Obtenir des données ne nécessite pas la garde de sécurité autant que je sache. –