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

Visual Studio2010 Expを動かして、C#のWindows Applicationプロジェクトを作成しました。

フォーム、F_1にボタンB1を配置しました。B1をダブルクリックすると、

Form1.csに下記のように追加されました。
private void B1_Click(object sender, EventArgs e)

次に、B1をBTN1に変更しました。
private void B1_Click(object sender, EventArgs e)は変更されていないにも関わらずデバック実行が通ってしまいました。

質問1.なぜデバックの実行が通ってしまったのでしょうか?
質問2.自動でprivate boid BTN1_Clickに変更にはならないのでしょうか?

Visual Studioは右も左もわからないレベルの人間です。何卒ご教授お願い致します。

A 回答 (3件)

まぁ、既に回答されている通りイベントハンドラの名前と、オブジェクトの名前は別…だからですかね。


『デザイナでイベントハンドラを追加するときにオブジェクトの名前からハンドラ名が生成されるだけ』です。

Form1.Designer.csをコード表示すると、
this.BTN1.Click += new System.EventHandler(this.B1_Click);
なんて行があるかと。
で、デザイナで対象の名前を変えると「this.BTN1.Click」の部分が変更され、ハンドラの名前には影響を受けません。

なので、戻り値の型と引数の型・個数が合えばハンドラとして登録も可能。ということになります。
似たような処理をするが対象が異なるだけ…という場合はハンドラを1つにまとめることも可能。ということになります。

private void button1_Click(object sender, EventArgs e)
{
 TextBox1.Text = "abcd";
}
private void button2_Click(object sender, EventArgs e)
{
 TextBox2.Text = "abcd";
}
private void button3_Click(object sender, EventArgs e)
{
 TextBox3.Text = "abcd";
}

private void button_Click(object sender, EventArgs e)
{
 TextBox Target = null;

 switch(((Button)sender).Name)
 {
  case "button1":Target = TextBox1; break;
  case "button2":Target = TextBox2; break;
  case "button3":Target = TextBox3; break;
 }
 Target.Text = "abcd";
}
にもまとめられる…ということになります。
# まぁ、こうするとオブジェクトの名前を気軽に変えるワケには行かなくなりますが。
# 変えた場合でも実行時エラーにならないし。
# TextBoxの方の名前を変えた場合にはコンパイルエラーになりますけど。
    • good
    • 0
この回答へのお礼

なんというわかりやすいご説明!とてもよく理解でき、かつ勉強になりました!ありがとうございました!!

お礼日時:2013/02/06 10:37

ボタンのプロパティ欄で、ボタンのイベント欄を確認すればわかることですが


ボタンをClickしたときに実行する関数は、最初は空ですが、ダブルクリックした時にB1_Clickが登録されます。
その後は、たとえボタン名を変更してもClickしたときに実行する関数はB1_Clickのままです。
もし、その関数名を変更するとClickしたときに実行する関数が行方不明になってClickイベント欄は空になります。(変更した関数名を登録してやらないとClickイベントが実行されない)
    • good
    • 0
この回答へのお礼

なんというわかりやすいご説明!とてもよく理解でき、かつ勉強になりました!ありがとうございました!!

お礼日時:2013/02/06 10:37

手元に無いから、記憶だけで書くけど



その「private void B1_Click・・・・・」の右側が大事

Handled by なんとかかんとかって記述があるでしょう?

そっちはコントロール名の変更に追従して書き換えられているはず

つまり見ているのは、関数名ではなくイベントの割り当て名とでも言うべき部分

関数名を勝手に変えるのはリスキー
作成者がもっと分かり易い意味のある関数名に書き換えている可能性もあるし
他のコード(命令行)で、その関数を呼んでいるかも知れない
ソレなのに、勝手に書き換えてしまえばコードを壊してしまう結果になる
    • good
    • 0
この回答へのお礼

なんというわかりやすいご説明!とてもよく理解でき、かつ勉強になりました!ありがとうございました!!

お礼日時:2013/02/06 10:37

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

このQ&Aを見た人はこんなQ&Aも見ています