フォームのラベルには、タイマーのカウントが表示されています。ここで、フォーム2を使用して停止、開始、リセットしたいと思います。this.plzヘルプを実行するにはどうすればよいですか。
3 に答える
フォームは単なるクラスであり、フォーム2のタイマーはそのクラス内のオブジェクトです。
タイマーのプロパティをpublicに変更してModifiers
から、Form1内でForm2をインスタンス化し、Form 2のメソッドを呼び出して、Show()
現在公開されているタイマーオブジェクトにアクセスできます。
したがって、次のような2つの形式のプロジェクトがあります。
次のようにフォーム1でボタンを作成します。
フォーム2にタイマーオブジェクトを配置し、次のようにアクセス修飾子を変更します。
次に、フォーム1のボタンの下に次のコードを配置します。
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
f2.timer1.Enabled = true;
}
これで、フォーム2を起動し、フォーム1からフォーム2のタイマーのすべてのプロパティにアクセスできます。
これは役に立ちますか?
タイマー オブジェクトが Form1 に存在する場合は、そのパブリック プロパティを作成します。
public Timer Form1Timer { get { return timer1; } }
次に、フォーム 2 でフォーム 1 への参照を取得することにより、このタイマーにアクセスできます。これを行うには、コンストラクターに渡すか、フォーム 2 にプロパティを設定します。Form1 への参照を取得したら、タイマーでメソッドを呼び出すだけです。
Form1.Form1Timer.Start();
Form1 の参照を Form2 に渡すことができない場合は、いつでも Form1 からシングルトンを作成できます。
シングルトンを宣言します。
private static Form1 _singleton
シングルトンがまだない場合は初期化し、それを返します。
public static Form1 Singleton
{
get { _singleton ?? (_singleton = new Form1()); }
}
ベスト プラクティスとして、Form1 コンストラクターをプライベートにします。もちろん、Form1 にデフォルトのコンストラクター (パラメーターなし) がない場合、これは機能しません。
次に Form2 で:
Form1.Singleton.Form1Timer.Start();