我有一個Windows窗體(C#),它動態生成用戶控件的副本。每個子用戶控件都有一個計時器。將用戶控件的值用於主窗體(C#)
我想總結一下所有用戶控件(所有定時器的總和)花費的總時間。什麼是最好的方法來做到這一點?我怎樣才能讓用戶控件將其計時器值「發送」到主窗體?
謝謝!
我有一個Windows窗體(C#),它動態生成用戶控件的副本。每個子用戶控件都有一個計時器。將用戶控件的值用於主窗體(C#)
我想總結一下所有用戶控件(所有定時器的總和)花費的總時間。什麼是最好的方法來做到這一點?我怎樣才能讓用戶控件將其計時器值「發送」到主窗體?
謝謝!
MyForm.Controls.OfType<MyCustomControlType>().Sum(c => c.TimeTakenProperty)
需要注意的是,如果你想計算正在東西多長時間才能完成,你可能需要一個System.Diagnostics.StopWatch,而不是一個計時器。
用戶控件可以公開,將Windows窗體
內,您的用戶控件來概括屬性TimeSpent添加屬性TimeSpent,你返回定時器值
public long TimeSpent
{
get { return getTimeSpent(); }
}
要計算所花費的時間你需要記住你的定時器已經觸發了多少次,然後把這個數字乘以定時器間隔屬性。
的getTimeSpent()
功能應該做到這一點
聽起來和我正在尋找的完全一樣... 我怎樣才能做到這一點? – Aidenn 2010-12-03 02:01:01
另一種方法是實現某種觀察者模式的,在C#中可以通過使用代表可以輕鬆實現。首先創建一個具有所需簽名的委託,然後包含委託類型的事件,然後在發生用戶控制事件時引發該事件。每次創建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 */
}
}
計時器不會花費任何時間,也沒有「價值」。它只是通過它的Tick事件運行一個事件。 – 2010-12-03 02:07:45
我的不好,我沒有說清楚 - 我把它叫做計時器,但它只是一個DateTime值,它是作爲單擊Start和Stop時的差異計算出來的:) – Aidenn 2010-12-03 02:09:51