C# 如何在WinForms中使用相同的按钮启动和停止计时器?

C# 如何在WinForms中使用相同的按钮启动和停止计时器?,c#,winforms,C#,Winforms,我是编程新手,我有这个问题,对我来说这听起来很简单,但我太笨了,弄不明白 所以。。。我想在我的窗口窗体上创建一个计时器,它以按钮开始,然后相同的按钮停止它。并且在屏幕上有一个标签,它只显示计时器已经运行了多少次 private void BtnStart\u单击(对象发送方,事件参数e) { 如果(计时器1.已启用) timer1.Enabled=false; 如果(!timer1.Enabled) timer1.Enabled=true; } int c=0; 私有无效计时器1_刻度(对象发送

我是编程新手,我有这个问题,对我来说这听起来很简单,但我太笨了,弄不明白

所以。。。我想在我的窗口窗体上创建一个
计时器
,它以
按钮
开始,然后相同的
按钮
停止它。并且在屏幕上有一个
标签
,它只显示
计时器
已经运行了多少次

private void BtnStart\u单击(对象发送方,事件参数e)
{
如果(计时器1.已启用)
timer1.Enabled=false;
如果(!timer1.Enabled)
timer1.Enabled=true;
}
int c=0;
私有无效计时器1_刻度(对象发送方,事件参数e)
{
C++;
lblTimer.Text=c.ToString();
}
第一次按钮点击起作用,它启动
定时器
,而
标签
显示计数器,但我认为它进入了一个无休止的循环,防止再次按下按钮,因为我无法停止
定时器
?有人能告诉我我做错了什么吗?
谢谢

这是当您单击
按钮停止
计时器时发生的情况:

//如果计时器已启用,它将禁用它。
如果(计时器1.已启用){
timer1.Enabled=false;
//计时器现在被禁用了。这很好,这就是你想要的。
}
//此时,计时器被禁用,因此下一次测试将重新启用它!
如果(!timer1.Enabled){
timer1.Enabled=true;
//计时器刚开始重新启用:/
}
使用
else
语句修复此问题:

if(定时器1.已启用)
timer1.Enabled=false;
其他的
timer1.Enabled=true;

因此,只有两个块中的一个运行。

这是当您单击
按钮停止
计时器时发生的情况:

timer1.Enabled = !timer1.Enabled;
//如果计时器已启用,它将禁用它。
如果(计时器1.已启用){
timer1.Enabled=false;
//计时器现在被禁用了。这很好,这就是你想要的。
}
//此时,计时器被禁用,因此下一次测试将重新启用它!
如果(!timer1.Enabled){
timer1.Enabled=true;
//计时器刚开始重新启用:/
}
使用
else
语句修复此问题:

if(定时器1.已启用)
timer1.Enabled=false;
其他的
timer1.Enabled=true;

因此,只有两个块中的一个运行。

您可以使用此计时器1。已启用=!定时器1.已启用;在您的功能中点击按钮,当您点击定时器时有相反的状态

timer1.Enabled = !timer1.Enabled;
private void BtnStart_Click(object sender, EventArgs e)
    {

            timer1.Enabled = !timer1.Enabled;

    }

您可以使用此计时器1。已启用=!定时器1.已启用;在您的功能中点击按钮,当您点击定时器时有相反的状态

private void BtnStart_Click(object sender, EventArgs e)
    {

            timer1.Enabled = !timer1.Enabled;

    }
你的问题是:

启动计时器,然后在下一行中再次禁用它

例如:

private void BtnStart_Click(object sender, EventArgs e)
{
    //when you click the button the value will be to opposite wich it was
    timer.Enabled = !timer.Enabled
}
你的问题是:

启动计时器,然后在下一行中再次禁用它

例如:

private void BtnStart_Click(object sender, EventArgs e)
{
    //when you click the button the value will be to opposite wich it was
    timer.Enabled = !timer.Enabled
}
在C#中,您可以对上述场景使用以下代码示例

private void BtnStart_Click(object sender, EventArgs e)
{
    //when you click the button then the timer reacts as opposite value
    timer1.Enabled = !timer1.Enabled
}
例如,如果计时器已启用,则当您单击按钮(BtnStart)时,它将禁用计时器

计时器1滴答事件-

int c = 0;
private void timer1_Tick( object sender, EventArgs e )
{
    c++;
    label1.Text = c.ToString();
}
在C#中,您可以对上述场景使用以下代码示例

private void BtnStart_Click(object sender, EventArgs e)
{
    //when you click the button then the timer reacts as opposite value
    timer1.Enabled = !timer1.Enabled
}
例如,如果计时器已启用,则当您单击按钮(BtnStart)时,它将禁用计时器

计时器1滴答事件-

int c = 0;
private void timer1_Tick( object sender, EventArgs e )
{
    c++;
    label1.Text = c.ToString();
}

这不是您问题的答案,但是
BtnStart\u Click
方法中的代码可以替换为
timer1.Enabled=!定时器1.已启用。无
if
s需要。快速补丁:
if(计时器1.已启用)。。。else如果(!timer1.Enabled).
-请注意
else
@DmitryBychenko实际上
else
本身就足够了(如果它通过
else
分支,它已经意味着
timer1
未启用)这不是您问题的答案,但是
BtnStart\u Click
方法中的代码可以替换为
timer1.Enabled=!定时器1.已启用。无
if
s需要。快速补丁:
if(计时器1.已启用)。。。else if(!timer1.Enabled).
-请注意
else
@DmitryBychenko实际上
else
本身就足够了(如果它通过
else
分支,它已经意味着
timer1
未启用),而这是切换布尔值的常见且好的方法,除了你的代码行之外的一点解释不会有什么坏处虽然这是切换布尔值的一种常见且好的方法,但是除了你的代码行之外的一点解释不会有什么坏处。OP需要了解的是,如果没有
else
,则第一个
if
是无意义的,因为第二个
if
将恢复布尔值。这是。OP需要理解的是,如果没有<代码> EX/COD>,第一个<代码>如果是毫无意义的,因为第二个<代码>如果将返回布尔值。1)它是C++,而不是C++,2)没有地方假定计时器还不是一个属性。3) 如果未启用计时器,它将不会接收滴答声事件。因此,while循环首先是无用的,其次是无止境的。它将以每秒一百万的增量旋转。谢谢你的评论,我知道它是c#,c是int的名字,++是一个增量。由于你与循环相关,我的回答过头了。1)它是C,不是C++,2)没有地方假设计时器还没有成为一个属性。3) 如果未启用计时器,它将不会接收滴答声事件。因此,while循环首先是无用的,其次是无止境的。它将以每秒一百万的增量旋转。谢谢你的评论,我知道它是c#,c是int的名字,++是一个增量。既然你的回答是正确的,我的回答就过头了。