WPF C#复选框控制计时器

时间:2017-07-25 18:25:31

标签: c# wpf checkbox

我被困在这里。我有一个复选框。选中后,启动计时器。未选中时停止计时器。我可以在这里使用一些帮助。我尝试过检查,取消选中和点击事件。什么都没有停止计时器。它只是继续运行...

Xaml :(所有三个活动仅用于展示)

<CheckBox x:Name="CbAutoRefresh" Grid.Row="1" ClipToBounds="True" HorizontalAlignment="Left" Content="Enable Auto Refresh" Margin="10,0,0,0" Width="150" Click="CbAutoRefresh_Click" Checked="CbAutoRefresh_Checked" Unchecked="CbAutoRefresh_Unchecked" />

C#:(所有三次尝试)

private void CbAutoRefresh_Click(object sender, RoutedEventArgs e)
{

    var aTimer = new Timer();
    if (CbAutoRefresh.IsChecked == true)
    {
        //start a timer:

        aTimer.Elapsed += OnTimedEvent;
        aTimer.Interval = 60000;
        aTimer.Enabled = true;
    }
    else
    {
        aTimer.Enabled = false;
    }
}

private void CbAutoRefresh_Checked(object sender, RoutedEventArgs e)
{
    //start a timer:
    var aTimer = new Timer();
    aTimer.Elapsed += OnTimedEvent;
    aTimer.Interval = 60000;
    aTimer.Enabled = true;
}

private void CbAutoRefresh_Unchecked(object sender, RoutedEventArgs e)
{
    var aTimer = new Timer {Enabled = false};
}

我甚至试过这个,在Stack Overflow

提到了
<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>

private void CheckBoxChanged(object sender, RoutedEventArgs e)
{
  MessageBox.Show("Eureka, it changed!");
}

2 个答案:

答案 0 :(得分:1)

删除声明

def t_AND(self, t):
    r'&&'
    t.value = Conjunction
    return t

def t_OR(self, t):
    r'\|\|'
    t.value = Disjunction
    return t

# ...

def p_construct(self, p):
    '''
    disjunction: predicate OR predicate
               | conjunction OR predicate
    conjunction: predicate AND predicate
    '''
    p[0] = p[2](p[1], p[3])

来自点击的处理程序。将它移动到构造函数或某个函数在对象的生命周期中运行一次。 使用Timer的Start()&amp; Stop()方法启动和停止计时器。

答案 1 :(得分:1)

不要在每个事件上创建new Timer。在Window对象(窗口字段/属性)中声明1个计时器,在构造函数中初始化它并在任何事件处理程序中使用它。目前您正在运行多个计时器

<CheckBox x:Name="CbAutoRefresh" Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>
public class MyWindow()
{
   private Timer _t;
   public MyWindow()
   {
      InitializeComponent();
      _t = new Timer();
      _t.Elapsed += OnTimedEvent;
      _t.Interval = 60000;
   }

   private void CheckBoxChanged(object sender, RoutedEventArgs e)
   {
      _t.Enabled = CbAutoRefresh.IsChecked;
   }    
}