2017-05-07 76 views
-2

我试图做一个程序,如果向上的箭头键被按下,应该增加label1中的数字。当它被释放时,label1应该保持其当前值。同样,向下箭头键应该减少标签中显示的值。到目前为止,我有下面的代码(我只是显示了主要的类,方法和字段),我无法弄清楚为什么程序什么都不做。为什么System.Timers.Timer timer1不能启动?

public partial class Form1 : Form 
{ 
    private bool _downArrowPressed; 
    private bool _upArrowPressed; 
    private int num = default(int); 

    System.Timers.Timer timer1 = new System.Timers.Timer { Interval = 100 }; 

    public Form1() 
    { 
     InitializeComponent(); 
     timer1.Elapsed += new System.Timers.ElapsedEventHandler (ChangeText); 
    } 

    private void ChangeText(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     if (_downArrowPressed) 
      label1.Text = num--.ToString(); 
     else if (_upArrowPressed) 
      label1.Text = num++.ToString(); 
    } 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.Down: 
       _downArrowPressed = true; 
       timer1.Start(); 
       break; 
      case Keys.Up: 
       _upArrowPressed = true; 
       timer1.Start(); 
       break; 
     } 
    } 

    private void Form1_KeyUp(object sender, KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.Down: 
       _downArrowPressed = false; 
       timer1.Stop(); 
       break; 
      case Keys.Up: 
       _upArrowPressed = false; 
       timer1.Stop(); 
       break; 
     } 
    } 
} 
+1

你尝试过调试它取代它呢? 'timer1.Start()'是否被触发过? –

+0

'System.Timers.Timer'适用于无头环境。回调在线程池线程中执行,这将在WinForms/WPF环境中失败,因为UI操作必须发生在Main/UI线程上。你应该使用'System.Windows.Forms.Timer'来代替。 – Dai

+0

你是对的Zac,timer1.Start()不会被触发。我仍然无能为力。我注意到了你的建议,Dai,并将'System.Timers.Timer'改为'System.Windows.Forms.Timer'。 – NNNicomedes

回答

0

您需要通过从工具箱enter image description here

拖动这个组件使用System.Windows.Forms.TimerSystem.Timers.Timer

相关问题