アーカイブ

‘VB’ タグのついている投稿

フォーカスが外れたときの拡張イベント

2009 年 10 月 15 日 Takeshi コメントはありません

.NETのテキストボックスのロストフォーカス周りのイベントはマウスでクリックするか、キーボードでTabを押すかによって発生する順序が異なります。
確実にフォーカスが外れた最後に処理を行いたい場合にはちょっとだけ工夫をする必要があります。

マウスで別のコントロールに移動した場合にはLostFocus→Validatedの順でイベントが発生し、Tabキーで移動した場合にはValidated→LostFocusの順でイベントが発生します。
そこで、両方のイベントが発生した場合にイベントを発行するようにカスタムコントロールを作成する事によって必ずフォーカスが外れる際の最後に処理を記述することができるようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Class CustomTextBox : Inherits System.Windows.Forms.TextBox
    Public Event OutFocus As EventHandler
 
    Private raisedValidated As Boolean
    Private raisedLostFocus As Boolean
 
    Public Sub New()
        MyBase.New()
        Me.raisedValidated = False
        Me.raisedLostFocus = False
    End Sub
 
    Protected Overrides Sub OnValidated(ByVal e As System.EventArgs)
        MyBase.OnValidated(e)
        Me.raisedValidated = True
        If Me.raisedLostFocus Then
            Me.OnOutFocus(e)
        End If
    End Sub
 
    Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
        MyBase.OnLostFocus(e)
        Me.raisedLostFocus = True
        If Me.raisedValidated Then
            Me.OnOutFocus(e)
        End If
    End Sub
 
    Protected Overridable Sub OnOutFocus(ByVal e As System.EventArgs)
        RaiseEvent OutFocus(Me, e)
    End Sub
 
End Class
カテゴリー: .NET タグ: , ,