Comment mettre à jour le texte de l'étiquette à partir d'une minuterie gestionnaire d'événement dans une classe différente?
J'ai un formulaire avec un label appelé labelTime
.
Dans une autre classe appelée TimeCalculate
j'ai un Timer
avec Timer_tick
gestionnaire d'événement.
Dans cette classe j'ai aussi une fonction de GetTime()
qui renvoie l'heure dans un format de chaîne.
Je veux cette chaîne pour apparaître dans labelTime
pour chaque Timer_tick
.
Est-il un moyen d'y parvenir?
public void MyTimer(Label o_TimeLabel)
{
Timer Clock = new Timer();
Clock.Tag = o_TimeLabel.Text;
Clock.Interval = 1000; Clock.Start();
Clock.Tick += new EventHandler(Timer_Tick);
}
private void Timer_Tick(object sender, EventArgs eArgs)
{
if (sender == Clock)
{
//LabelTime.Text = GetTime(); <-- I want this to work!
}
}
Rebecca peut vous montrer ce code existant que vous avez afin que nous puissions voir ce qui se passe quand la minuterie d'événement est appelé..?
OriginalL'auteur RebeccaWhiteflower22 | 2013-07-19
Vous devez vous connecter pour publier un commentaire.
La
Timer
etTimer_Tick
de l'événement n'ont pas besoin d'être dans la même classe que votreLabel
, vous pouvez créer un événement personnalisé pour publier/souscrire à votreTimer_Tick
event
.Votre
TimeCalculate
classe:Extrêmement simplifiée exemple ci-dessus montre comment vous pouvez utiliser un
delegate
etevent
àpublish
une notification lorsque leTimer_Tick
Timer
objet événement se déclenche.Des objets qui nécessitent une notification lorsque le
Timer_Tick
événement se déclenche (I. E. votre temps est mis à jour) suffit desubscribe
à votre événement personnalisé editeur:Nous créons une instance de la
TimeCalcualte
classe avant de souscrire à l'TimerTickHandler
événement qui spécifie une méthode (TimeHasChanged
) pour gérer la notification. Notez quetxtTheTime
est le nom que j'ai donné unTextBox
sur mon formulaire.C'est beaucoup de code pour faire une chose simple
Il est plus de code, oui, cependant, il ya des raisons pour que quelqu'un pourrait préférer cette solution, comme de ne pas mélanger les logiques. En outre, si cette solution permet à d'autres objets qui pourraient vouloir utiliser le
TimeCalcualte
classeTimer_Tick
événement sans exiger de leur propreTimer
mise en œuvre. Ils n'ont qu'à s'abonner à laTimerTickHandle
événement.OriginalL'auteur
Rebecca dans votre Time_Tick Événement que vous pouvez faire ce qui suit
J'ai posté avant de me mettre à jour votre exemple de code dans votre question initiale. aussi essayer de mettre à jour votre question afin de refléter le fait en question(s) que vous avez indiqué dans votre commentaire
OriginalL'auteur MethodMan
Vous avez besoin de la Minuterie et de sa manifestation dans la même forme que l'Étiquette
MODIFIER
Depuis que vous avez fait cela, vous avez besoin d';
Déclarer l'objet Timer comme une variable d'instance, à l'extérieur du constructeur, de l'initialiser dans le constructeur.
N'avez pas à vous soucier de test 'expéditeur == Horloge".
Et ont une Étiquette de l'instance d'objet de cette classe ainsi, la valeur de l'Étiquette que vous passez un paramètre dans le constructeur.
Mais je continue de recommander mon premier, à l'aide de Visual Studio, vous pouvez faire glisser et déposer une Minuterie sur votre formulaire, la valeur de l'intervalle et du texte de la Minuterie dans l'interface graphique et vous n'avez plus à vous soucier de l'événement Tick dans votre code.
Merci. J'ai essayé la deuxième option, mais je ne peux pas envoyer une Étiquette en tant que paramètre. Il me donne l'erreur suivante: Un champ d'initialiseur ne peut pas faire référence à la non-statique champ, une méthode ou une propriété.
Post la ligne de code que des erreurs
OriginalL'auteur Colin Steel