ユーザーコントロールのコピーを動的に生成するWindowsフォーム(C#)があります。子のユーザーコントロールのそれぞれにタイマーがあります。ユーザーコントロールの値をメインフォームに使用する(C#)
私はすべてのユーザーコントロール(すべてのタイマーの合計)が費やした全体的な時間をメインフォームで要約したいと思います。これを行う最善の方法は何でしょうか?ユーザーコントロールがタイマー値をメインフォームに「送信」させるにはどうすればよいですか?
ありがとうございました!
ユーザーコントロールのコピーを動的に生成するWindowsフォーム(C#)があります。子のユーザーコントロールのそれぞれにタイマーがあります。ユーザーコントロールの値をメインフォームに使用する(C#)
私はすべてのユーザーコントロール(すべてのタイマーの合計)が費やした全体的な時間をメインフォームで要約したいと思います。これを行う最善の方法は何でしょうか?ユーザーコントロールがタイマー値をメインフォームに「送信」させるにはどうすればよいですか?
ありがとうございました!
あなたはタイマー値を返すプロパティTimeSpentを追加するには、ユーザーコントロール内のWindowsフォーム
で要約されるだろう財産TimeSpentを公開することができますあなたのユーザーコントロール費やした時間を計算する
public long TimeSpent
{
get { return getTimeSpent(); }
}
あなたのタイマーが何回発砲されたのかを覚えておき、タイマーインターバルのプロパティーにその数を掛ける必要があります。
getTimeSpent()
機能を使用すると、完了するまでに取っているどのくらい何かカウントしようとしている場合は、タイマーではなくSystem.Diagnostics.StopWatchを望むことがまさにそれ
別のアプローチは、それが容易デリゲートを用いて実現することができる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イベントでイベントを実行させるだけです。 –
私は悪い、私はそれを明確にしていない - 私はそれをタイマーと呼びますが、それはあなたが開始と停止をクリックするときの違いとして計算されたDateTime値です: – Aidenn