我必须显示一个表单大约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();
}
答案 0 :(得分: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();
}
答案 1 :(得分: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
是没有意义的。称之为它。
答案 2 :(得分: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();
}
答案 3 :(得分:0)
我看到几个潜在的问题。首先,您应该只设置一次计时器,也许在表单构建时,您不需要设置间隔,并且每次radioButton1的检查状态更改时都会连接一个偶数处理程序。
在MyTimer_Tick内部,第一个行应该调用MyTimer.Stop()(只需调用stop,你不需要乱用Enabled,他们做同样的事情)。
那么你可以显示MessageBox(它是模态和阻塞),显示Form6,隐藏f5等。
将MessageBox.Show()视为一个非常长时间运行的调用。在消息框被解除之前它不会返回(它可能很容易占用超过5秒或任意时间)。当MessageBox启动时,计时器滴答事件仍在排队(因为停止计时器的行尚未执行)。值得查看MessageBox.Show()的文档并阅读有关模态对话框的内容以及它与替代方法的不同之处。
尝试清理其他人指出的名字。
答案 4 :(得分: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传递秒数时,您希望将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关闭后再显示另一个表单,只需在show5事件处理程序中关闭form5之前显示它:
private void timer1_Tick(object sender, EventArgs e)
{
_start++;
if(_start >= _seconds)
{
new Form2().Show();
Close();
}
}