我的表单中有一个名为labelTime
的标签。
在另一个名为TimeCalculate
的类中,我有Timer
个Timer_tick
事件处理程序。
在这个类中,我还有一个函数GetTime()
,它以字符串格式返回时间。
我希望每个labelTime
都会在Timer_tick
中显示此字符串。
有没有办法实现这个目标?
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!
}
}
答案 0 :(得分:1)
您需要Timer和事件的格式与Label
相同修改
既然你已经这样做了,你需要;
将Timer对象声明为构造函数外部的实例变量,并在构造函数中初始化它 不必担心测试'sender == Clock' 并且在此类中也有一个Label实例对象,将其设置为您在构造函数中作为参数传递的Label。
Timer Clock;
Label LabelTime;
public void MyTimer(Label o_TimeLabel)
{
LabelTime = o_TimeLabel;
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)
{
LabelTime.Text = GetTime(); // For your custom time
}
答案 1 :(得分:1)
Rebecca在您的Time_Tick活动中,您可以执行以下操作
private void Timer_Tick(object sender, EventArgs e)
{
lblTime.Text = DateTime.Now.ToString("hh:mm:ss");
}
答案 2 :(得分:1)
Timer
和Timer_Tick
事件不需要与Label
位于同一个类中,您可以创建一个简单的自定义事件来发布/订阅Timer_Tick
} event
。
您的TimeCalculate
班级:
namespace StackOverflow.WinForms
{
using System;
using System.Windows.Forms;
public class TimeCalculate
{
private Timer timer;
private string theTime;
public string TheTime
{
get
{
return theTime;
}
set
{
theTime = value;
OnTheTimeChanged(this.theTime);
}
}
public TimeCalculate()
{
timer = new Timer();
timer.Tick += new EventHandler(Timer_Tick);
timer.Interval = 1000;
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
TheTime = DateTime.UtcNow.ToString("dd/mm/yyyy HH:mm:ss");
}
public delegate void TimerTickHandler(string newTime);
public event TimerTickHandler TheTimeChanged;
protected void OnTheTimeChanged(string newTime)
{
if (TheTimeChanged != null)
{
TheTimeChanged(newTime);
}
}
}
}
上面极其简化的示例显示了在delegate
event
对象事件触发时如何使用publish
和Timer_Tick
到Timer
通知。< / p>
Timer_Tick
事件触发时需要通知的任何对象(I.E.您的时间更新)只需要subscribe
到自定义事件发布者:
namespace StackOverflow.WinForms
{
using System.Windows.Forms;
public partial class Form1 : Form
{
private TimeCalculate timeCalculate;
public Form1()
{
InitializeComponent();
this.timeCalculate = new TimeCalculate();
this.timeCalculate.TheTimeChanged += new TimeCalculate.TimerTickHandler(TimeHasChanged);
}
protected void TimeHasChanged(string newTime)
{
this.txtTheTime.Text = newTime;
}
}
}
我们在订阅TimeCalcualte
事件之前创建TimerTickHandler
类的实例,指定处理通知的方法(TimeHasChanged
)。请注意,txtTheTime
是我在表单上提供TextBox
的名称。