0

我创建以下表单并单击 3 个按钮(随机)。在我单击一个按钮后,它必须在单击它 3 秒后显示相关消息。但是,如果我同时单击了另一个按钮,则必须显示该按钮的相关消息,并且必须取消队列中的前一条消息。

例如,如果我单击button111.30.00,则相关消息应仅在 11.30.03 弹出,例如“您在 3 秒前单击:1”。但是,如果我button2在 11.30.03 之前单击另一个,例如在 11.30.02,则相关消息应在 11.30.05 弹出,例如“您在 3 秒前单击:2”,并且必须取消计划于 11.30.03 的消息。

这是我的代码:

private int signal = 0;

public Form1()
{
    InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
    signal = 1;
    displayMessage(signal);
}

private void button2_Click(object sender, EventArgs e)
{
    signal = 2;
    displayMessage(signal);
}

private void button3_Click(object sender, EventArgs e)
{
    signal = 3;
    displayMessage(signal);
}

private void displayMessage(int number) 
{       
    MessageBox.Show("You clicked : "+number+ "before 3 Seconds");
}
4

3 回答 3

5

设置按钮Tag

button1.Tag = 1;
button2.Tag = 2;
button3.Tag = 3;

然后设置Click事件:

button1.Click += button_Click;
button2.Click += button_Click;
button3.Click += button_Click;

关于Click事件:

private void button_Click(object sender, EventArgs e)
{
    signal = (int) ((Button))sender.Tag;
    displayMessage(signal);
}
于 2012-07-28T20:06:28.400 回答
2

启动计时器。根据按钮单击不断改变信号值,当经过的时间等于 3 秒时,显示来自 tick 事件的消息框。根据您的需要设置计时器间隔,这将反映在“相关消息”中。

int signal = 0;
System.Timers.Timer t = new System.Timers.Timer(3000);
private void Form1_Load(object sender, EventArgs e)
{
    //----------------------- other parts of code ---------------------

    // at last
    t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
    t.Start();
}

void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    if (signal == 0)
        return;

    t.Stop();
    MessageBox.Show("You clicked: " + signal + " before " + t.Interval + " Seconds");
    signal = 0;
    t.Start(); //move this to top of msgbox if you want timer to be reset right after poppin the msgbox.
}

private void button1_Click(object sender, EventArgs e)
{
    signal = 1;
    t.Stop();
    t.Start();
}

private void button2_Click(object sender, EventArgs e)
{
    signal = 2;
    t.Stop();
    t.Start();
}

private void button3_Click(object sender, EventArgs e)
{
    signal = 3; 
    t.Stop();
    t.Start();
}
于 2012-07-28T20:09:22.707 回答
1

这不是一个有人会给你一个答案的地方,对该区域进行一些研究,然后在你遇到困难时发布。您想创建一个静态计时器并检查它是否在每个事件中完成

http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.71).aspx

于 2012-07-28T20:04:02.263 回答