我想要下一个: 按空格键 - label1.Text变为“Up”,几秒钟后(随机从1到5)label1.Text将变为“Remove hand”,然后KeyUp label1.Text将更改为“Down”。 我知道如何使用KeyUp和KeyDown,但我不明白如何使用timer ???
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Timer timer = new Timer();
public Form1()
{
InitializeComponent();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
{
label1.Text = "Down";
timer.Interval = 5000;//5 seconds
timer.Tick += new EventHandler(timer1_Tick);
timer.Start();
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
{
label1.Text = "Up";
}
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = "Remove";
timer.Stop();
}
}
}
答案 0 :(得分:1)
未经过测试,但是这样:
private Timer timer = new Timer();
private void OnKeyPress(object sender, KeyPressEventArgs e)
{
//check key press args for space here
timer.Interval = 5000;//5 seconds
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
label1.Text = "Up";
timer.Elapsed -= timer_Elapsed;
timer.Stop();
}
基本上,interval属性以毫秒为单位,您可以在此指定要等待的时间。然后,您将向Elapsed事件添加事件处理程序。从调用Start()方法开始经过指定的时间后,将触发此操作。
答案 1 :(得分:0)
KeyDown
将继续触发,因此您可能只需要一个变量来启动计时器一次。
private Random rnd = new Random();
private bool _SpacePressed = false;
public Form1() {
InitializeComponent();
this.KeyPreview = true;
label1.Text = "Down";
timer1.Tick += new EventHandler(timer1_Tick);
}
void timer1_Tick(object sender, EventArgs e) {
timer1.Stop();
label1.Text = "Remove Hand";
}
protected override void OnKeyDown(KeyEventArgs e) {
base.OnKeyDown(e);
if (e.KeyCode == Keys.Space && !_SpacePressed) {
_SpacePressed = true;
label1.Text = "Up";
timer1.Interval = rnd.Next(1, 5) * 1000;
timer1.Start();
}
}
protected override void OnKeyUp(KeyEventArgs e) {
base.OnKeyUp(e);
if (_SpacePressed) {
_SpacePressed = false;
timer1.Stop();
label1.Text = "Down";
}
}