如何安排消息弹出窗口并仅显示最后一条消息?

时间:2012-07-28 19:58:46

标签: c# .net timer

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

例如,如果我在11.30.00点击button1,则相关消息应仅在11.30.03弹出,如“你点击:1秒前1秒”。但是如果我在11.30.03之前点击另一个button2,比如说在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");
}

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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();
}

答案 2 :(得分: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