- PR -

イベントのログ

1
投稿者投稿内容
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-03-24 10:00
Windows フォームのコントロールに発生したイベント情報をログファイルに出力したいと思っています。例えば、ボタンが押されたら「ボタン1が押された」という情報をログに出力したいのです。出力内容の形式は問わず、分かれば良いのです。何時、何のコントロールで何のイベントが発生したかが分かれば良いのです。最終的にやりたい事はアプリ上で出力するエラーログと合せて、ユーザが画面上で何の動作をした時にエラーが発生したのかを追いたいのです。

単純に考えると全てのイベント処理にログ出力処理を記述すれば良いのですが、全てのイベントにいちいち記述するのは面倒ですし、記述漏れも発生する可能性もあり、スマートではありません。イベントのデリゲートの機能などを使って記述できないものでしょうか?



一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-24 10:23
「イベント発生時にログを書き出す機能を持ったButton」や「イベント発生時にログを書き出す機能を持ったTextBox」などを、既存のコントロールから継承して作りそれを使うようにすれば、コントロールが増えたり名前が変わったりした時なども記述漏れがなくイベントのログを取れるのではないでしょうか。

あとはFormのControlsプロパティを使って、貼り付けてあるコントロールを全て見ていってイベントを受けるようにするとか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-24 10:28
 C#であれば、追加した順に複数のイベントハンドラが実行されるそうですよ。
参照:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_017/cs2_017_01.html#cs1702
だから、動作のイベントハンドラと、ログのイベントハンドラを追加すればいいのではないですか?VB.NETは、どうなんだろう?
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-03-24 10:49
this.button1.Click += new System.EventHandler(this.EventLog);
this.button1.Click += new System.EventHandler(this.button1_Click);

private void EventLog(object sender, System.EventArgs e)
{
ログ出力処理
}

上記のような方法も考えたのですが、問題があります。
1.senderによってどのコントロールからのイベントなのかは判断できるが、何のイベントなのか判断する方法が分からない。
2.this.button1.Click += new System.EventHandler(this.EventLog);をいちいち登録するのが忘れそう。特に後からコントロールを追加した場合など。


1

スキルアップ/キャリアアップ(JOB@IT)