0

次が必要です: スペースバーを押すと - label1.Text が "Up" になり、数秒後 (1 から 5 までランダム)、label1.Text が "Remove hand" に変わり、次に KeyUp label1.Text が "Down" に変わります。 . KeyUpとKeyDownの使い方はわかるのですが、タイマーの使い方がわかりません???

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();
        }
    }
}
4

2 に答える 2

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() メソッドを呼び出してから指定された時間が経過したときに発生します。

于 2012-05-18T14:11:24.163 に答える
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";
  }
}
于 2012-05-18T14:45:02.647 に答える