[AccessD] Practical way to handle non-standard length "long text" fields

Ryan Wehler wrwehler at gmail.com
Thu Mar 7 14:09:34 CST 2024


Jack,
  Here is my current class:

  Not sure how I should handle "going over" other than just warn the user.
I don't want to truncate their text because I can't even guarantee the text
they added was at the end of the textbox.

  I am using the label control that is bound to the textbox in the
"LabelName" field on the property sheets to use that as a "sure fire" way
to write out the amount of characters left onto the screen...

Option Compare Database
Option Explicit

Private WithEvents mTextbox As TextBox
Private mInitialBackColor   As Long
Private mLength             As Long
Private mWasWarned          As Boolean
Const C_EVENT = "[Event Procedure]"

Private Sub Class_Terminate()
    Set mTextbox = Nothing
End Sub

Public Sub mInit(tBox As TextBox, length As Long)
    Set mTextbox = tBox
    mLength = length
    mTextbox.OnChange = C_EVENT
    mInitialBackColor = mTextbox.BackColor
End Sub

Private Sub mTextbox_Change()
    Dim chars As Long
    With mTextbox
        chars = mLength - (Len(.text))

        'label bound to control
        'control.LabelName doesn't allow for compile to reference by name.

        If ControlExists(mTextbox.Controls(0).Name, mTextbox.Parent) Then
            mTextbox.Controls(0).Caption = _
                printf("{0} character{1} remaining.", chars, IIf(chars > 1,
"s", ""))
        End If

        Select Case Round((Len(.text) / mLength) * 100)
            Case 0 To 79
                .BackColor = mInitialBackColor
                mWasWarned = False
            Case 80 To 89
                .BackColor = vbYellow
                mWasWarned = False
            Case 90 To 99
                .BackColor = vbRed
                mWasWarned = False
            Case Is > 100
                'avoid repeated warnings when backing off
                If mWasWarned = False Then TimedMessageBox printf("You have
exceeded the maximum length of this field. ({0})", mLength), 1
                mWasWarned = True
        End Select
    End With
End Sub

On Thu, Mar 7, 2024 at 11:55 AM jack drawbridge <jackandpat.d at gmail.com>
wrote:

> Ryan,
> I'd like to see whatever your solution is. JColby and "class" seems
> automatic and appropriate, but the copy/paste comment could be a killer. I
> guess it depends on your environment--you know the situation.
>
> I know you have mentioned without Change event etc, but thought I should
> offer this link <https://www.isladogs.co.uk/set-character-limit/> which
> you
> can review or ignore.
>
> Good luck.
>
> jack
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> https://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>


More information about the AccessD mailing list