1

1 つのフォームを約 5 秒間表示してから、そのフォームを閉じて、新しいフォームが表示されたらタイマーを停止する必要がある別のフォームを表示する必要があります。

私はこれを行うのが難しいです。

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    Form5 f5 = new Form5();
    f5.Show();
    f5.label7.Text = label6.Text;

    MyTimer.Interval = 5000; // 0.5 mins
    MyTimer.Tick += new EventHandler(MyTimer_Tick);
    MyTimer.Start();
}

private void MyTimer_Tick(object sender, EventArgs e)
{
    MessageBox.Show("All The Best for Your Test and Your Time Starts Now.");
    Form6 f6 = new Form6();
    f6.Show();
    MyTimer.Enabled = false;

    Form5 f5 = new Form5();
    f5.Hide();
}
4

5 に答える 5

1

このコードを試してください

 Form5 f5 = new Form5();
 private void radioButton1_CheckedChanged(object sender, EventArgs e)
 {
    f5.Show();
    f5.label7.Text = label6.Text;

    MyTimer.Interval = 5000; // 0.5 mins
    MyTimer.Tick += new EventHandler(MyTimer_Tick);
    MyTimer.Start();
  }

  private void MyTimer_Tick(object sender, EventArgs e)
  {
    MessageBox.Show("All The Best for Your Test and Your Time Starts Now.");
    Form6 f6 = new Form6();
    f6.Show();
    MyTimer.Enabled = false;
    MyTimer.stop();        

    f5.Hide();
  }
于 2012-08-19T19:58:50.410 に答える
0

あなたはそれを難し​​くしていると思います。私があなたを正しく理解していれば...

タイマーを form5 に追加し、そのプロパティEnabled = true;Interavl = 1000;(1000 ミリ秒または 1 秒) を設定するだけです。タイマーティックイベントハンドラーをform5タイマーに追加するだけです

private int _start = 0;
private int _seconds = 5;

private void timer1_Tick(object sender, EventArgs e)
{
        _start++;
        if(_start >= _seconds)
        {
             Close();
        }
}

_start_secondsフォーム クラスのプライベート フィールドやプロパティのように、イベント ハンドラの前に初期化する必要があります。このコードは私にとっては問題なく動作し、表示された 5 秒後に form5 を閉じます。これをより柔軟にしたい場合、たとえば、form5 を表示する秒数を設定したい場合は、たとえば、form5 コンストラクターを次のようにリロードできます。

public Form5(int seconds)
{
       InitializeComponent();
       _seconds = seconds;
}

form1では、form5を作成するときに秒数を渡しますUはform5をパラメーターとして表示したい:

Form5 f5 = new Form5(5);

また、フォーム 5 の新しいインスタンスをイベント ハンドラーで直接作成する方がよいと思います

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{

    new Form5(10).Show(); // show form5 for 10 seconds
    ...
}

form5 を閉じた後に別のフォームを表示したい場合は、タイマー ティック イベント ハンドラで form5 を閉じる前にそれを表示します。

private void timer1_Tick(object sender, EventArgs e)
    {
            _start++;
            if(_start >= _seconds)
            {
                 new Form2().Show();
                 Close();
            }
    }
于 2012-09-09T19:59:44.597 に答える
0

関数の外側の宣言を引っ張るForm5ので、フィールドです。現状では、関数はこのクラスの異なるインスタンスを持っています。

Form5 f5 = new Form5();

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    f5.Show();
    f5.label7.Text = label6.Text;

    MyTimer.Interval = 5000; // 0.5 mins
    MyTimer.Tick += new EventHandler(MyTimer_Tick);
    MyTimer.Start();
}

private void MyTimer_Tick(object sender, EventArgs e)
{
    MessageBox.Show("All The Best for Your Test and Your Time Starts Now.");
    Form6 f6 = new Form6();
    f6.Show();
    MyTimer.Enabled = false;
    MyTimer.Stop();

    f5.Hide();
}

注: フォーム クラスと変数の名前を変更する必要がありますが、これf6は無意味です。それを何と呼んでください。

于 2012-08-19T17:32:14.310 に答える
0

これを試して

    Form5 f5 = new Form5();  //declare form obj globally 

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{

    f5.Show();
    f5.label7.Text = label6.Text;

    MyTimer.Interval = 5000; // 0.5 mins
    MyTimer.Tick += new EventHandler(MyTimer_Tick);
    MyTimer.Start();
}

private void MyTimer_Tick(object sender, EventArgs e)
{
    MessageBox.Show("All The Best for Your Test and Your Time Starts Now.");
    Form6 f6 = new Form6();
    f6.Show();
    MyTimer.Enabled = false;


    f5.Hide();
}
于 2012-08-19T17:36:00.817 に答える
0

潜在的な問題がいくつか見られます。まず、タイマーを 1 回だけ設定する必要があります。おそらくフォームの作成時に、radioButton1 のチェック状態が変化するたびに間隔を設定して偶数ハンドラーを接続する必要はありません。

MyTimer_Tick の内部では、最初の行で MyTimer.Stop() を呼び出す必要があります (stop を呼び出すだけです。Enabled をいじる必要はありません。同じことを行います)。

次に、MessageBox (モーダルでブロック) を表示したり、Form6 を表示したり、f5 を非表示にしたりできます。

MessageBox.Show() は、非常に長時間実行される呼び出しと考えてください。メッセージ ボックスが閉じられるまで返されません (簡単に 5 秒以上、または任意の時間がかかる場合があります)。MessageBox が起動している間、タイマー ティック イベントはまだキューに入っています (タイマーを停止する行がまだ実行されていないため)。MessageBox.Show() のドキュメントを調べて、モーダル ダイアログとは何か、代替ダイアログとどのように異なるかについて読む価値があります。

そして、他の人が指摘したように、名前をクリーンアップしてみてください。

于 2012-08-19T20:09:40.097 に答える