1

フォームのラベルには、タイマーのカウントが表示されています。ここで、フォーム2を使用して停止、開始、リセットしたいと思います。this.plzヘルプを実行するにはどうすればよいですか。

4

3 に答える 3

3

フォームは単なるクラスであり、フォーム2のタイマーはそのクラス内のオブジェクトです。

タイマーのプロパティをpublicに変更してModifiersから、Form1内でForm2をインスタンス化し、Form 2のメソッドを呼び出して、Show()現在公開されているタイマーオブジェクトにアクセスできます。

したがって、次のような2つの形式のプロジェクトがあります。

ソリューションエクスプローラー

次のようにフォーム1でボタンを作成します。

フォーム1

フォーム2にタイマーオブジェクトを配置し、次のようにアクセス修飾子を変更します。

プロパティ

次に、フォーム1のボタンの下に次のコードを配置します。

private void button1_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    f2.Show();
    f2.timer1.Enabled = true;
}

これで、フォーム2を起動し、フォーム1からフォーム2のタイマーのすべてのプロパティにアクセスできます。

これは役に立ちますか?

于 2012-07-06T14:26:22.843 に答える
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();
于 2012-07-06T14:36:42.773 に答える