TextBoxを継承したクラスについて

解決


ゆうな  2008-07-10 07:45:54  No: 144917  IP: 192.*.*.*

テキストボックスを継承したクラスを作成しようと思っているのですが
以下の2種類のLostFocusイベントの書き方に違いがあるのでしょうか?
オーバーライドして書くのが普通なのでしょうか?

Public Class Class1
    Inherits TextBox

    Protected Sub Class1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus
        Me.Text = "てすと"
    End Sub

    Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
        MyBase.OnLostFocus(e)

        Me.Text = "てすと"
    End Sub
End Class

編集 削除
魔界の仮面弁士  2008-07-10 11:19:53  No: 144918  IP: 192.*.*.*

> オーバーライドして書くのが普通なのでしょうか?
はい。「Onイベント」メソッドを Overrides する事をおすすめします。
http://msdn.microsoft.com/ja-jp/library/tc568dw7.aspx


> 違いがあるのでしょうか?
オーバーライド法なら、「Textを書き換えてからLostFocusを発生させる」のか
「LostFocusを発生させてからTextを書き換える」のかを選択できます。
また、継承元クラスのイベントと継承先クラスのイベントの呼び分けもできます。

たとえば下記のような処理にすると、違いが見えてくるかもしれません。

Class Class1
  Inherits TextBox
  Protected Sub Class1_LostFocus(sender As Object, e As EventArgs) Handles Me.LostFocus
    'LostFocusイベントで、テキスト変更を行う。
    Me.Text = Me.Name & "_LostFocus"
  End Sub
  Protected Overrides Sub OnLostFocus(e As EventArgs)
    'Onメソッドでは、背景色を変更する。
    Me.BackColor = Color.Cyan
    '(継承元クラスの)LostFocus イベントを発生させる。
    MyBase.OnLostFocus(e)
  End Sub

  'クリックされたら、(継承元クラスの)LostFocusイベントを発生させる
  Protected Overrides Sub OnClick(e As EventArgs)
    'MyClass.OnLostFocus(EventArgs.Empty)
    MyBase.OnLostFocus(EventArgs.Empty)
    MyBase.OnClick(e)
  End Sub

End Class

編集 削除
ゆうな  2008-07-11 08:04:56  No: 144919  IP: 192.*.*.*

魔界の仮面弁士さん、ありがとうございます。
違いがわかり、すっきりしました。

編集 削除