我有一个Windows窗体(C#),可以动态生成用户控件的副本。每个子用户控件都有一个计时器。
我想总结主要表格所有用户控件花费的总时间(所有计时器的总和)。最好的方法是什么?如何让用户控件将其计时器值“发送”到主窗体?
谢谢!
答案 0 :(得分:3)
MyForm.Controls.OfType<MyCustomControlType>().Sum(c => c.TimeTakenProperty)
请注意,如果您要计算完成某项内容需要多长时间,则可能需要System.Diagnostics.StopWatch而非Timer。
答案 1 :(得分:1)
您的用户控件可以公开将由Windows窗体
汇总的属性TimeSpent在用户控件中添加一个属性TimeSpent,返回计时器值
public long TimeSpent
{
get { return getTimeSpent(); }
}
要计算花费的时间,您需要记住计时器触发的次数,然后将该数字乘以计时器间隔属性。
getTimeSpent()
函数应该只做那个
答案 2 :(得分:1)
另一种方法是实现某种观察者模式,在C#中,可以使用 delegates 轻松实现。首先创建一个具有所需签名的委托,然后包含委托类型的事件,然后在用户的控制事件发生时引发事件。每次创建Usercontrol实例时,您使用客户端上的某个方法(观察者)声明您声明的事件(匹配您的委托签名)。
public delegate void MyUserControlEvent(UserControl control, object sender, EventArgs e);
public partial class MyUserControl : UserControl
{
public event MyUserControlEvent TheEvent;
private void TimerFecha_Tick(object sender, EventArgs e)
{
if (TheEvent != null) { TheEvent(this, sender, e); }
}
}
public partial class SomeClient : SomeBase
{
public SomeClient()
{
MyUserControl control = new MyUserControl();
control.TheEvent = TheListenerProcedure;
}
public void TheListenerProcedure(UserControl control, object sender, EventArgs e)
{
/* IMPLEMENT LOGIC HERE */
}
}