Battles are fought daily in VB newsgroups - SDI environment vs. MDI
environment, classes vs. modules, .net vs. .classic, VB vs. Delphi, and so
on. But mention InputBox - the dreaded first
refuge of the newbie and last refuge of the desperate - and the
consensus among VB devs is ceremoniously unanimous - it sucks.
The warped and perverted soul responsible for the logic giving digital birth to this
"not-user-friendly interface" will eternally remain possibly one of
Microsoft's most well-guarded secrets, for obvious
personal health reasons. But when the desperate (or newbie) must use this
built-in atrocity, there is at least one thing we can do to make its
inclusion in our otherwise well-crafted applications somewhat more
palatable.
Now,
why someone would actually need to differentiate between whether an
InputBox Cancel was pressed, or whether OK was pressed with no string
entered, frankly escapes me since the end result - no string to work with
- is the same and can easily be handled by a few lines of code using Len(). But some
apparently do, and as I neither fall into the newbie nor
desperate camp I am obviously missing the obvious. I suppose. But I digress.
Here
then is a quick snip of code that can differentiate between the Cancel
being pressed and simply not entering any data and pressing OK. VB5 and
VB6 users can use this out-of-the-box, so to speak, while VB4-32 users
will need to add a API declare for StrPtr ( Private Declare Function
StrPtr Lib "vb40032.dll" Alias "VarPrt" (pAny As Any) As Long). In VB6 and
earlier, StrPtr() is the only way to differentiate "" and vbNullString.
(.Net handles strings differently, and we won't even go there).
Let's
blame Bill McCarthy for the initial newsgroup post pumping much-needed
life into this dialog, and Mattias Sjögren and Mark Hurd for propagating
its continued use! |
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
' applications, but you may not reproduce
' or publish this code on any web site,
' online service, or distribute as source
' on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Command1_Click()
Dim sInput As String
sInput = InputBox("Go ahead ... abuse me", _
"Dreaded InputBox Demo", _
"Some default text goes here")
If StrPtr(sInput) = 0 Then
MsgBox "Cancel was pressed"
Else
If Len(sInput) = 0 Then
MsgBox "OK pressed but nothing entered."
Else
MsgBox "OK pressed: value= " & sInput
End If 'Len(sInput)
End If 'StrPtr
End Sub |