テキストフィールドプロバイダのソースコード

CTextFieldProviderとCTexitEditorのソースコードを掲載します。独自 のフィールドプロバイダとエディタを作成する場合は、このコードを元 に作成してください。

Public Class CTextFieldProvider
    Inherits CFieldProvider

    Public Sub New(Optional ByVal caption As String = Nothing)
        MyBase.New(caption)
    End Sub

    Public Overrides Function Editor() As IEditor
        Return New CTextBoxEditor
    End Function

    Public Overrides Function ImeMode() As System.Windows.Forms.ImeMode
        Return Windows.Forms.ImeMode.NoControl
    End Function

End Class
Public Class CTextBoxEditor
    Inherits TextBox
    Implements IEditor

    Public Event _Leave(ByVal sender As Object, ByVal direction As String) Implements IEditor.Leave
    Public Event _ValueChanged(ByVal sender As Object) Implements IEditor.ValueChanged
    Public Event _ProcessDialogKey(ByVal sender As Object, ByVal keyData As System.Windows.Forms.Keys, ByRef handled As Boolean) Implements IEditor.ProcessDialogKey

    Public Sub Initialize(ByVal field As UTable.CField) Implements IEditor.Initialize
        With field.DynamicSetting
            Me.Font = .Font
            Select Case .HorizontalAlignment
                Case UTable.CSetting.EHAlign.LEFT
                    Me.TextAlign = HorizontalAlignment.Left
                Case UTable.CSetting.EHAlign.MIDDLE
                    Me.TextAlign = HorizontalAlignment.Center
                Case UTable.CSetting.EHAlign.RIGHT
                    Me.TextAlign = HorizontalAlignment.Right
            End Select
        End With
    End Sub

    Public Sub EditorEnter(ByVal key As Char, ByVal hIMC As Integer, ByVal clear As Boolean) Implements IEditor.Enter
        If clear Then
            Me.Text = Nothing
        End If
        UTable.ImmAssociateContext(Me, hIMC)
        Me.Focus()
        If key <> Nothing Then
            Me.Text = key
            Me.SelectionStart = 1
        End If
    End Sub

    Public Property Value() As Object Implements IEditor.Value
        Get
            Return Me.Text
        End Get
        Set(ByVal value As Object)
            Me.Text = value
        End Set
    End Property

    Protected Overrides Function IsInputKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
        Select Case keyData
            Case Keys.Up
                RaiseEvent _Leave(Me, "UP")
                Return True
            Case Keys.Down
                RaiseEvent _Leave(Me, "DOWN")
                Return True
            Case Keys.Left
                If Me.SelectionLength = 0 And Me.SelectionStart = 0 Then
                    RaiseEvent _Leave(Me, "LEFT")
                    Return True
                End If
            Case Keys.Right
                If Me.SelectionLength = 0 And Me.SelectionStart = Me.Text.Length Then
                    RaiseEvent _Leave(Me, "RIGHT")
                    Return True
                End If
        End Select
        Return MyBase.IsInputKey(keyData)
    End Function

    Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
        Dim handled As Boolean = False
        RaiseEvent _ProcessDialogKey(Me, keyData, handled)
        If handled Then
            Return True
        Else
            Return MyBase.ProcessDialogKey(keyData)
        End If
    End Function

    Public Function RaiseValidate() As Boolean Implements IEditor.RaiseValidate
        Dim e As New System.ComponentModel.CancelEventArgs
        Me.OnValidating(e)
        If Not e.Cancel Then
            Me.OnValidated(System.EventArgs.Empty)
            Return True
        End If
        Return False
    End Function

    Private Sub CTextBoxEditor_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.TextChanged
        RaiseEvent _ValueChanged(Me)
    End Sub

    Public Function Control() As System.Windows.Forms.Control Implements IEditor.Control
        Return Me
    End Function

End Class
目次へ戻る