
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は右も左もわからないレベルの人間です。何卒ご教授お願い致します。
No.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の方の名前を変えた場合にはコンパイルエラーになりますけど。
No.2
- 回答日時:
ボタンのプロパティ欄で、ボタンのイベント欄を確認すればわかることですが
ボタンをClickしたときに実行する関数は、最初は空ですが、ダブルクリックした時にB1_Clickが登録されます。
その後は、たとえボタン名を変更してもClickしたときに実行する関数はB1_Clickのままです。
もし、その関数名を変更するとClickしたときに実行する関数が行方不明になってClickイベント欄は空になります。(変更した関数名を登録してやらないとClickイベントが実行されない)
No.1
- 回答日時:
手元に無いから、記憶だけで書くけど
その「private void B1_Click・・・・・」の右側が大事
Handled by なんとかかんとかって記述があるでしょう?
そっちはコントロール名の変更に追従して書き換えられているはず
つまり見ているのは、関数名ではなくイベントの割り当て名とでも言うべき部分
関数名を勝手に変えるのはリスキー
作成者がもっと分かり易い意味のある関数名に書き換えている可能性もあるし
他のコード(命令行)で、その関数を呼んでいるかも知れない
ソレなのに、勝手に書き換えてしまえばコードを壊してしまう結果になる
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- その他(プログラミング・Web制作) uwscのCHKING関数の画像の認識がうまくいかない。 1 2022/06/18 20:55
このQ&Aを見た人はこんなQ&Aも見ています
-
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
DataTableから条件を満たした行を別のDatatableへコピーしたい
その他(プログラミング・Web制作)
-
-
4
C#のループでtextboxに値を入れる方法
C言語・C++・C#
-
5
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
6
他プロジェクトのFormを自プロジェクトにコピーしてもうまく働かない
C言語・C++・C#
-
7
C# Form上に配置されたコントロールに重なるように透過GIF(PNG)を表示したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リクエスト結果が一瞬しか表示...
-
JSPの処理の途中で、JavaScript...
-
以下のコードを実行しても、オ...
-
jqueryのbxsliderをマウスオー...
-
if(1){...}とはどういうことで...
-
1つのVBAコードをすべてのコア...
-
GoTo文とかSelect文の処理の仕...
-
VBA ステータスバー DoEvents
-
VBの実行シーケンスについて
-
eval()の危険性の具体例を教え...
-
デザイン時のVisible=Falseは実...
-
C#でボタン名を変更しても動く
-
jQueryで行う初期表示処理について
-
jQuery ui Datepicker 明日以降...
-
PowerPointで時計表示
-
自作関数から WndProc( ) を止める
-
JavaScriptで、実行するたび値...
-
助けてください!出来ないと解...
-
VBAによる第3、4水準文字の判定...
-
javascriptからサーバサイドの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
JavaScriptでショートカットキ...
-
以下のコードを実行しても、オ...
-
デザイン時のVisible=Falseは実...
-
C#でボタン名を変更しても動く
-
〔Excel:VBA〕マクロの実行が異...
-
VBA ステータスバー DoEvents
-
リクエスト結果が一瞬しか表示...
-
ラベルの色がかわってくれない
-
1つのVBAコードをすべてのコア...
-
VBA SORT Applyでエラー
-
初心者です。gulpでコンパイル...
-
eval()の危険性の具体例を教え...
-
列を非表示にするマクロが実行...
-
PowerPointで時計表示
-
innerHTMLなどの反映タイミング
-
JavaScriptで、実行するたび値...
-
VB.netでタイマーがスタートし...
-
alert()が実行できない
おすすめ情報