0

次のフォームを作成し、3つのボタンを(ランダムに)クリックします。ボタンをクリックした後、ボタンをクリックしてから3秒後に関連メッセージが表示される必要があります。ただし、その間に別のボタンをクリックした場合は、そのボタンに関連するメッセージを表示し、キュー内の前のメッセージをキャンセルする必要があります。

例として、11.30.00でクリックbutton1すると、関連するメッセージが11.30.03でのみポップアップするはずです。たとえば、「クリックしました:3秒前に1」のようになります。しかしbutton2、11.30.03の前に別のメッセージをクリックすると、たとえば11.30.02に、「クリックしました:3秒前に2」のように、関連するメッセージが11.30.05にポップアップ表示され、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秒に等しい場合、ティックイベントからのメッセージボックスを表示します。必要に応じてタイマー間隔を設定すると、「関連メッセージ」に反映されます。

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 に答える