Proper Validation of xtpControlEdit (VB6)
Printed From: Codejock Forums
Category: Codejock Products
Forum Name: Command Bars
Forum Description: Topics Related to Codejock Command Bars
URL: http://forum.codejock.com/forum_posts.asp?TID=2909
Printed Date: 19 May 2025 at 1:59am Software Version: Web Wiz Forums 12.04 - http://www.webwizforums.com
Topic: Proper Validation of xtpControlEdit (VB6)
Posted By: Milkman
Subject: Proper Validation of xtpControlEdit (VB6)
Date Posted: 16 September 2005 at 11:06pm
Most of my applications require that any text entered into an edit box
be checked for consistency. For instance, if the user enters xyz
in an ID# edit box, you wouldn't want your program to use a letter
value when it should use a number value. The typical desired
result would be to discard the incorrectly entered value and restore
the previous contents of the edit box.
Unfortunately, the method in which to do this isn't exactly spelled out
in the substandard documentation. Adding insult to injury, there
isn't even an editbox worked into ANY of the command bar samples.
Below is the required code to implement proper validation of an
xtpControlEdit within a command bar. It uses the Tag (they call
it the "Paramater") property of the edit control to store the previous
contents of the edit box.
You'll first need to create an ID number for the editbox. Create
this global value in a seperate module where you store your constants.
Public Const ID_EDIT = 205 |
You then need to construct your command bar.
Private Sub cbToolbar()
'Declare Temporary Variables
Dim Control As CommandBarControl
Dim Toolbar As CommandBar
Dim EditControl As CommandBarEdit
'Set Toolbar properties
Set Toolbar = CommandBars.Add("Test Command Bar", xtpBarBottom)
'Create Toolbar
With Toolbar.Controls
Set EditControl = .Add(xtpControlEdit, ID_EDIT, "")
EditControl.Text = "Test"
EditControl.Parameter = EditControl.Text
End With
End Sub
|
After the control exists you'll need
to put some additional code in the "ControlSelected" (catchs when you
press the Enter key) and "Update" (catch the case where you change the
text and then just leave the text box without pressing the enter key)
Events.
Private Sub CommandBars_ControlSelected(ByVal Control As XtremeCommandBars.ICommandBarControl)
'Process Selected Events
If Control Is Nothing Then Exit Sub
Select Case Control.Id
Case ID_EDIT:
If Control.Parameter <> Control.Text Then EditBox_Validate Control
End Select
End Sub
|
Private Sub CommandBars_Update(ByVal Control As XtremeCommandBars.ICommandBarControl)
'Process Update Requests
If Control Is Nothing Then Exit Sub
Select Case Control.Id
Case ID_EDIT:
If (Control.HasFocus = False) And (Control.Text <>
Control.Parameter) Then EditBox_Validate Control End Select
End Sub
|
You're probably wondering why the "If Control Is Nothing Then Exit Sub"
line at the beginning of each event handler. Well it would appear
that these event handlers are sometimes called without a control
variable passed to it. Very strange. The example programs
choose to use the "On Error Resume Next" command to juse ignore any
errors. I don't like this approach because it turns off error
checking for the rest of the code in the event handler. A bad
thing when you're trying to debug your program.
Finally you'll need to add the validation routine. Use something like this.
Private Sub EditBox_Validate(ByRef EditBox As CommandBarEdit)
'This sub will validate the edit box text
'Check the text in the EditBox.Text property
'If bad then replace replace .Text with .Parameter
'Maybe you want to raise an error
'If text is good then let it be and update the .Parameter for the next time the
'validate routine is called
'Validation Successful
EditBox.Parameter = EditBox.Text
End Sub
|
If you want your program to programmatically update the text in the
editbox; make sure to change BOTH the .Text and the .Parameter
properties to avoid having the validate routine execute needlessly.
Now if I can only figure out how to centre text in the thing, I'll be set.
|
Replies:
Posted By: apuhjee
Date Posted: 07 May 2006 at 10:52am
Excellent post - thanks Milkman, you saved a few hairs on my head!
Cheers ~ jp
------------- I like mathematics because it is not human and has nothing particular
to do with this planet or with the whole accidental universe — because,
like Spinoza's God, it won't love us in return.
|
|