2010-12-03 36 views
0

我有一個Windows窗體(C#),它動態生成用戶控件的副本。每個子用戶控件都有一個計時器。將用戶控件的值用於主窗體(C#)

我想總結一下所有用戶控件(所有定時器的總和)花費的總時間。什麼是最好的方法來做到這一點?我怎樣才能讓用戶控件將其計時器值「發送」到主窗體?

謝謝!

+0

計時器不會花費任何時間,也沒有「價值」。它只是通過它的Tick事件運行一個事件。 – 2010-12-03 02:07:45

+0

我的不好,我沒有說清楚 - 我把它叫做計時器,但它只是一個DateTime值,它是作爲單擊Start和Stop時的差異計算出來的:) – Aidenn 2010-12-03 02:09:51

回答

3
MyForm.Controls.OfType<MyCustomControlType>().Sum(c => c.TimeTakenProperty) 

需要注意的是,如果你想計算正在東西多長時間才能完成,你可能需要一個System.Diagnostics.StopWatch,而不是一個計時器。

1

用戶控件可以公開,將Windows窗體

內,您的用戶控件來概括屬性TimeSpent添加屬性TimeSpent,你返回定時器值

public long TimeSpent 
{ 
    get { return getTimeSpent(); } 
} 

要計算所花費的時間你需要記住你的定時器已經觸發了多少次,然後把這個數字乘以定時器間隔屬性。

getTimeSpent()功能應該做到這一點

+0

聽起來和我正在尋找的完全一樣... 我怎樣才能做到這一點? – Aidenn 2010-12-03 02:01:01

1

另一種方法是實現某種觀察者模式的,在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 */ 
    } 
}