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

Ryan W wrwehler at gmail.com
Thu Mar 7 16:53:44 CST 2024


Yeah that function is in some other public module. 


Sent from my iPhone

> On Mar 7, 2024, at 4:50 PM, John Colby <jwcolby at gmail.com> wrote:
> 
> I tend to do something like
> 
> On error resume next
> set mLbl = mtxt.controls(0)
> 
> Then I can play with the label assuming that it exists.
> 
>> On Thu, Mar 7, 2024 at 3:09 PM Ryan Wehler <wrwehler at gmail.com> wrote:
>> 
>> 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
>>> 
>> --
>> AccessD mailing list
>> AccessD at databaseadvisors.com
>> https://databaseadvisors.com/mailman/listinfo/accessd
>> Website: http://www.databaseadvisors.com
>> 
> 
> 
> --
> John W. Colby
> Colby Consulting
> --
> 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