それが良いアイデアかどうかはわかりませんが、これはおそらくより学術的な演習になるので、我慢してください。
X 秒ごとに (Timer を使用して) テキスト ファイルを検索し、この UserControl 内にその情報を表示する UserControl を作成していたとします。このコントロールを MyUserControl と呼びましょう。
基本を再ハッシュするには:
このタイマーをこのコントロールのメンバー変数として使用し、次のようなコードを作成します。
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
そして、次のようなイベント ハンドラー メソッド:
private void timer1_Tick(object sender, EventArgs e)
{
// Read text-file and do lots of goodness.
}
これで、MyUserControl のパブリック プロパティを経過時間に設定できるようになりました。このコントロールをフォームに配置するだけで、小さなコントロールが自動的に更新されます。きちんとした。
ここに私が興味を持ったものがあります:
配置しようとしているフォームには、既にタイマーがあります。では、なぜ 2 つの競合するタイマーがあるのでしょうか。MyUserControl が必要な場合にのみ内部タイマーを使用する方法があることを望みます (たとえば、まだタイマーを持たない別のフォームに配置するなど)。
ここで MyUserControl timer1_Tick を次のように公開できると思います。
public void timer1_Tick(object sender, EventArgs e)
{
// Read text-file and do lots of goodness.
}
そして、これらはマルチキャストであるため、次の形式で次のようにします。
this.theFormTimer.Tick += new System.EventHandler(this.theFormTimer_Tick);
this.theFormTimer.Tick += new System.EventHandler(MyUserControlObject.timer1_Tick);
また、MyUserControl のメンバー変数を有効にしないように設定します。
しかし、これを行うためのよりスマートな方法はありますか? MyUserControl のイベント ハンドラー メソッドが既にフォーム タイマーの tick イベントに接続されていることをどうにか判断できますか? または、私が提案しているものとは別のタイプのアプローチを使用しますか?
ありがとう!(これが重複してしまった場合は申し訳ありません。今日の私のgoogle-fuは悪いかもしれません)