• ベストアンサー

イベントハンドラ関数について

現在VC++/CLR 2005 でプログラミングをしています。 基本的な事柄かもしれませんが、質問させてください  以下の2つのボタンのイベントハンドラ関数があった場合 //ボタン1のイベントハンドラ関数 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) String^ str = textBox1->Text } //ボタン2のイベントハンドラ関数 private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { } ボタン2をクリックしたときの動作とボタン1の動作を同じにしたいと思っています。 その場合は private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) String^ str = textBox1->Text } //ボタン2のイベントハンドラ関数 private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { String^ str = textBox1->Text } のようにボタン2のイベントハンドラ関数をボタン1と同じように書けばいいのですが イベントハンドラ関数の処理が膨大になった場合を考えて省略する 書き方は無いのでしょうか?(以下の場合ですとエラーが起こってしまいます。) private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { button1_Click(); } 宜しくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

button1_Click()を直接呼ぶよりPreformClickメソッドを使うほうがいいかも知れません ... button1->PerformClick(); といった具合に呼び出しましょうと MSDNでは推奨しているようですよ

smis
質問者

お礼

貴重なアドバイス有難うございます。 このような簡潔な方法があるとは知りませんでした。 是非活用させていただきます

その他の回答 (2)

  • ape5
  • ベストアンサー率57% (85/148)
回答No.2

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { button1_Click(sender,e); } これで呼べませんか?もしかして違うクラスにあるとかかな? でも、同じのがいっぱいあるなら、デリゲートとか使うのもいいのかもしれません。

smis
質問者

お礼

無事動きました。 貴重なアドバイスありがとうざいます

  • nekokone
  • ベストアンサー率29% (9/31)
回答No.1

button2_Clickイベントハンドラは引数としてイベントの送信元のオブジェクト(Object sender)と、イベントに関連するイベント情報(EventArgs e)を要求するのでそれを渡してやることでbutton1_Clickを流用することもできます。 例を書くと private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { button1_Click(sender, e); } のようになると思います。 私はC++/CLIを使ったことはなく、C#で.NETを使っているのですが、同じ方法(構文の一部は違いますが)で動かせると思います。

smis
質問者

お礼

無事動きました。 私もC++/CLIは非常にC#と似通ってる部分があるので C#のWEBサイトを見てプログラミングしております。 System::Object^ sender, System::EventArgs^ e の仕組みが分かりました。 貴重なアドバイスありがとうございます。

関連するQ&A

専門家に質問してみよう