- PR -

VB.NETのボタンイベントに対するログ出力方法

投稿者投稿内容
mover
常連さん
会議室デビュー日: 2004/06/20
投稿数: 47
投稿日時: 2004-06-20 18:01
ボタンイベントに対してログを出力したいと思っています。
現状、ログ出力クラスは作成できてるのですが、実装方法について悩んでいます。

単純にボタン押下時に上記クラスのインスタンスを生成して、
メソッドを呼べば問題は無いのですが。
全てのボタン押下時イベントに上記メソッドを呼ぶ処理を書くのがどうも気に入っていません。

コーディングする人がログ出力を気にしないでもいいような方法ってありませんか?
(ボタンを配置するだけで、ログ出力機能も備わっているようなもの)
初歩的なことのように思うので、参考になるURLなど教えていただければうれしいです。

よろしくお願い致します。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-06-20 23:00
ボタンを継承して、「イベントが発生した時にログを書き出すボタン」クラスを作成してはどうでしょう。
mover
常連さん
会議室デビュー日: 2004/06/20
投稿数: 47
投稿日時: 2004-06-21 10:26
返答ありがとうございます。

Windows コントロールライブラリを作り、継承元をUserControlから、
実際に継承したいButtonに書き換えて、
あとは OnClick メソッドをオーバーライドしてやるだけでOKですよね^^;

アドバイスありがとうございました。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-06-21 10:46
OnClick()はClickイベントが起きたときに呼ばれるメソッドというわけではないので、OnClick()をオーバーライドしてもしょうがないんじゃないでしょうか。
Buttonを継承したクラスの中で、Clickイベントが起きた時にログを書き出すという処理を行う必要があります。
mover
常連さん
会議室デビュー日: 2004/06/20
投稿数: 47
投稿日時: 2004-06-21 11:57
度々の指摘ありがとうございます。
以下のように、Clickイベントをshadow指定で作成したのですが、
どうもうまいこと機能してくれません;;

色々なサイトを参考にしたのですが、shadow指定がよくないのでしょうか?


Imports System.Windows.Forms

Public Class ButtonEx
Inherits System.Windows.Forms.Button
  
Private myReporter As Reporter   'ログ出力クラス

  'クリックイベント
Private Shadows Sub [Click]()
myReporter = New ToEventLog()  'ログ出力
End Sub

End Class
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-06-21 13:23
.NETのデリゲートという型、そしてイベントというクラスのメンバの機能について調べてみると良いかと思います。
(VB.NETを使っていると理解しづらいかもしれませんが)
コード:
Public Class ButtonEx
    Inherits Button

    Public Sub New()
        MyBase.New()

        AddHandler MyBase.Click, AddressOf Button_Click
    End Sub

    Private Sub Button_Click(ByVal sender As System.Object _
                           , ByVal e As System.EventArgs)
        'ログ書き出し
    End Sub

End Class


こんな感じで。
mover
常連さん
会議室デビュー日: 2004/06/20
投稿数: 47
投稿日時: 2004-06-21 16:12
なんとか解決することができました^^;
一郎さんのアドバイス大変助かりました。

以下参考にしたURLです。

http://www.gotdotnet.com/japan/quickstart/CompactFramework/doc/btndclick.aspx
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-21 18:32
引用:

一郎さんの書き込み (2004-06-21 10:46) より:
OnClick()はClickイベントが起きたときに呼ばれるメソッドというわけではないので、OnClick()をオーバーライドしてもしょうがないんじゃないでしょうか。


 clickイベントを発生させる為にコールするメソッドなので、今回の要件では、オーバーライドしたメソッド内でMyBase.OnClickメソッドを必ず呼び出すようにすれば、Okです。つまり、clickイベントが発生する要件が整うと、必ずOnClickメソッドが呼び出されます。Onイベント名メソッドは、そのように実装されなければならず、イベントの発生は、Onイベント名メソッドを呼び出すことで実装しなければなりません。
ご参考:イベントの発生


って、解決しているようですが。

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