- ベストアンサー
C#でボタン名を変更しても動く
- C#のWindows Applicationプロジェクトで、ボタン名を変更しても動く理由を教えてください。
- C#のWindows Applicationプロジェクトでボタン名を変更する際に、自動的に関数名も変更されるのか教えてください。
- Visual Studioを使ってC#のWindows Applicationプロジェクトを作成し、ボタン名の変更に関するデバッグの挙動について教えてください。
- みんなの回答 (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の方の名前を変えた場合にはコンパイルエラーになりますけど。
その他の回答 (2)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
ボタンのプロパティ欄で、ボタンのイベント欄を確認すればわかることですが ボタンをClickしたときに実行する関数は、最初は空ですが、ダブルクリックした時にB1_Clickが登録されます。 その後は、たとえボタン名を変更してもClickしたときに実行する関数はB1_Clickのままです。 もし、その関数名を変更するとClickしたときに実行する関数が行方不明になってClickイベント欄は空になります。(変更した関数名を登録してやらないとClickイベントが実行されない)
お礼
なんというわかりやすいご説明!とてもよく理解でき、かつ勉強になりました!ありがとうございました!!
- trajaa
- ベストアンサー率22% (2662/11921)
手元に無いから、記憶だけで書くけど その「private void B1_Click・・・・・」の右側が大事 Handled by なんとかかんとかって記述があるでしょう? そっちはコントロール名の変更に追従して書き換えられているはず つまり見ているのは、関数名ではなくイベントの割り当て名とでも言うべき部分 関数名を勝手に変えるのはリスキー 作成者がもっと分かり易い意味のある関数名に書き換えている可能性もあるし 他のコード(命令行)で、その関数を呼んでいるかも知れない ソレなのに、勝手に書き換えてしまえばコードを壊してしまう結果になる
お礼
なんというわかりやすいご説明!とてもよく理解でき、かつ勉強になりました!ありがとうございました!!
お礼
なんというわかりやすいご説明!とてもよく理解でき、かつ勉強になりました!ありがとうございました!!