C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: イベントハンドラを直接呼ばない理由


(過去ログ 111 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■65581 / inTopicNo.1)  イベントハンドラを直接呼ばない理由
  
□投稿者/ みきぬ (16回)-(2013/03/09(Sat) 15:37:29)

分類:[.NET 全般] 

【前置き】
ボタンをクリックしたときの処理が↓こうあったとして、

private void button1_Click(object sender, EventArgs e)
{
  // なにか処理
}

何かの条件を満たしたときにボタンが押されたのと同じ処理をやりたいとき、
button1_Click を呼ばないで(もちろん OnClick も PerformClick も使わないで)
「なにか処理」の部分をメソッドに切り出して、それを呼ぶべし、というやりかたが身についてます。
で最近これを人に説明しようとして、理由をど忘れしました。

【質問】
そうする理由って、なんでしたっけ?

【補足】
いちおう自分でも改めて考えた結果、「お前がやりたいのは処理であって、クリックじゃないだろ」
という答えが出てきたのですが、それ以外にもっとうまく納得できる理由があるんじゃないか、という気がしています。
なかったらなかったでそう言ってもらえると、私が安心できます。

というわけですみませんがよろしくお願いします。

引用返信 編集キー/
■65582 / inTopicNo.2)  Re[1]: イベントハンドラを直接呼ばない理由
□投稿者/ tinq (1回)-(2013/03/09(Sat) 16:34:10)
http://dobon.net/vb/dotnet/control/performclick.html
>ただし、コントロールのCanSelectプロパティがfalseの時は、PerformClickメソッドは何もしません。例えば、コントロールのVisibleプロパティがfalseの時、CanSelectプロパティはfalseとなります。
とあるので、ボタンの状態に処理が依存してしまうことになって危険でわかりにくい、ということではないでしょうか。

あとはやぱり
>「お前がやりたいのは処理であって、クリックじゃないだろ」
だと思います。何の処理をやっているのかわかりにくいですし、修正するにも実行されるイベントハンドラを探さないといけません。
複数のイベントハンドラが登録されたり、動的にイベントハンドラの追加/消去もできるので場合によっては思わぬ作用を生んでしまう危険もある、ということだと思ってます。
引用返信 編集キー/
■65638 / inTopicNo.3)  Re[2]: イベントハンドラを直接呼ばない理由
□投稿者/ みきぬ (17回)-(2013/03/12(Tue) 23:02:03)
回答ありがとうございます。

No65582 (tinq さん) に返信
> http://dobon.net/vb/dotnet/control/performclick.html
> >ただし、コントロールのCanSelectプロパティがfalseの時は、PerformClickメソッドは何もしません。例えば、コントロールのVisibleプロパティがfalseの時、CanSelectプロパティはfalseとなります。
> とあるので、ボタンの状態に処理が依存してしまうことになって危険でわかりにくい、ということではないでしょうか。

ああ、それはありますね。この用途で PerformClick はだめ、と。

もう1つ思いついた理由が、イベントハンドラの処理はUIスレッドから呼ばれる前提でよいが、
外部から呼んでしまうとそれが崩れてしまう、とか。…苦しいかしら。


昔どこかで別の理由を見た記憶がかすかにあるのですが、思い出せない…。
引用返信 編集キー/
■65667 / inTopicNo.4)  Re[3]: イベントハンドラを直接呼ばない理由
□投稿者/ doragora (2回)-(2013/03/13(Wed) 18:08:15)

3層アーキテクチャじゃないですかね?
http://itpro.nikkeibp.co.jp/word/page/10001985/
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -