アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在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();
}


宜しくお願いします

A 回答 (3件)

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を使っているのですが、同じ方法(構文の一部は違いますが)で動かせると思います。
    • good
    • 0
この回答へのお礼

無事動きました。
私もC++/CLIは非常にC#と似通ってる部分があるので
C#のWEBサイトを見てプログラミングしております。

System::Object^ sender, System::EventArgs^ e
の仕組みが分かりました。

貴重なアドバイスありがとうございます。

お礼日時:2007/01/12 16:24

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {


button1_Click(sender,e);
}
これで呼べませんか?もしかして違うクラスにあるとかかな?
でも、同じのがいっぱいあるなら、デリゲートとか使うのもいいのかもしれません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/12 16:22

button1_Click()を直接呼ぶよりPreformClickメソッドを使うほうがいいかも知れません ...


button1->PerformClick();
といった具合に呼び出しましょうと MSDNでは推奨しているようですよ
    • good
    • 0
この回答へのお礼

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

是非活用させていただきます

お礼日時:2007/01/12 17:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!