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 应该显示多少秒 U 可以,例如,重新加载 form5 构造函数,如...

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

在form1中,当您创建form5传递秒数时,您希望将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

我看到了几个潜在的问题。首先,您应该只设置一次计时器,也许在表单构建时,您不需要设置间隔并在每次 radioButton1 的检查状态更改时连接一个偶数处理程序。

在 MyTimer_Tick 内部,第一行应该是调用 MyTimer.Stop() (只需调用 stop,你不需要弄乱 Enabled,它们做同样的事情)。

然后您可以显示 MessageBox(模式和阻塞),显示 Form6,隐藏 f5 等。

将 MessageBox.Show() 视为一个非常长时间运行的调用。在消息框被关闭之前它不会返回(它很容易花费超过 5 秒或任意时间)。当 MessageBox 启动时,计时器滴答事件仍在排队(因为停止计时器的行尚未执行)。值得查找 MessageBox.Show() 的文档并阅读模式对话框是什么以及它与替代方案有何不同。

并尝试清理其他人指出的名称。

于 2012-08-19T20:09:40.097 回答