EventHandlerについて – プログラミング – Home

通知
すべてクリア

EventHandlerについて


yokohama
 yokohama
(@yokohama)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

はじめまして。
.Net VC++を使用しています。
勉強中につき、初歩的な質問かと思いますが、
ご教示お願いします。
以下のようにプログラムでbutton1を1回押下すると、
testは1、2、3・・・のように増えていきますが、
2回目を押下すると、testが1,3,5・・・と
増えていってしまいます。
なぜ1,3,5となってしまうのでしょうか。
また、解決するにはどうしたらいいのでしょうか。

public: void InitializeTimer(void)
{
timer1->Interval = 1000;
timer1->Enabled = true;
this->timer1->Tick += gcnew System::EventHandler(this,
&Form1::timer1_Tick);
test=0;
}

void timer1_Tick(System::Object ^ sender,System::EventArgs ^ e)
{
test++;
}

private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
InitializeTimer();
}


引用解決済
トピックタグ
囚人
 囚人
(@囚人)
ゲスト
結合: 17年前
投稿: 10
 

ボタンをクリックするたびに
this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
が実行されているため、Tick イベントにイベントハンドラがどんどん追加されていま
す。
もう一回ボタンを押すと、1,4,7…じゃないかな。

何故、ボタンをクリックするたびに InitializeTimer() するのでしょうか?
一回しか初期化したくないなら、それなりの場所(コンストラクタとか)におかないと
だめですよ。


返信引用
yokohama
 yokohama
(@yokohama)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

さっそくの回答ありがとうございます。
イベントハンドラが追加されてしまうのですね。
てっきり、初期化してやり直してくれるものだと
認識しておりました。

修正したら問題なく作動しました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました