BBS: Inland Empire Archive Date: 10-26-92 (10:26) Number: 342 From: MICHAEL MALLEY Refer#: NONE To: ALL Recvd: NO Subj: VB/DOS Bugs/Fixes 1/ Conf: (2) Quik_Bas
Hello everyone!
I have been using VB/DOS extensively for quite some time now, and have
run into numerous bugs, that unless you are looking for them, you
might never notice them. The following bug list is my own, and is not
all inclusive. That is to say, the following bugs and work arounds are
not part of Microsoft's data base, and there may be more bugs that MS
has announced, however I have seen no such list. Please feel free to
forward this message to other nets and echoes as appropriate.
If anybody needs some rudimentary code to help them out with the
MSGBOX problem in numbers 5 and 6, just ask, and I will be more than
happy to post it.
1. In the "T" index of the on-line help, there is a hyper-link
entitled: "Text Telephone (TT)". This is not a valid link.
Selecting this topic does nothing.
2. Clicking on the border of the drop down combo box causes a click
event.
Explanation:
If the ListIndex property of a combo box has a value of -1 (no item
from the list is selected), when the combo box is dropped down, no
item in the list will be highlighted. If the user clicks on the
border, the list is closed correctly, however a click event is
initiated, and any code in the click event that depends on ListIndex
will fail. If the user presses and holds the mouse button, the
closest item in the list will be selected prior to closure.
Solution:
Include the following line of code at the beginning of the click
event for the combo box:
IF Combo1.ListIndex = -1 THEN EXIT SUB
3. Setting SelStart or the Text property of a combo box will cause a
subsequent click event to set ListIndex to -1.
Explanation:
The user interface in VB does not left justify text in text boxes
when the user changes focus. This results in data being difficult
to read. The solution to this problem seems pretty straight
forward, in the lost focus event for objects with a text property,
set the SelStart property to 0, or reassign the text property to
itself (Object.Text = Object.Text). This should left justify the
text. If you do this to a combo box however, the subsequent
selection from the list for that combo box will result in a
ListIndex value of -1. This will cause any code in the click event
that relys on the ListIndex value to fail.
Please note that this only occurs if the user selects an item from
the list other than what was previously selected. If item #1 is
selected from the list, the bug will not make itself known until the
user selects an item other than #1. Reselecting item #1 does not
initiate the bug.
Solution:
To left justify the text without enabling the bug, use the following
code:
Temp$ = Combo1.Text
Combo1.Text = ""
Combo1.Text = Temp$
If you are using a central LostFocus event handler for all objects
with Text properties to perform data and length verification, and
you are passing the object to that procedure you will need to
include the following structure:
IF TYPEOF Object IS ComboBox Then
'--- Above code
ELSE
Object.SelStart = 0
END IF
4. Objects that fall under a combo box's drop down list are not updated
when the list is closed.
Explanation:
When the drop down list of a combo box is shown, the background is
saved in an internal buffer. When the list is hidden, that buffer
is restored to the screen. If the list covers something that gets
updated according to a selected item in the list, when the list is
hidden, the area of the screen that the list occupied will retain
its prior state.
I realize that this may be a little hard to comprehend, so I'll put
it another way. Let's assume that we have a combo box and a list
on the screen:
[ Combo1 ] v
+--------------------------+
| List1 |
| |
| |
+--------------------------+
The drop down list of the combo box contains the entries "Numbers"
and "Letters". When the user selects "Numbers" or "Letters", a
click event occurs. If Combo1.ListIndex = 0 then List1 is updated
to display the entries "12345", "678910", and "11 12 13 14 15".
If Combo1.ListIndex = 1 then the entries are "AaBbCcDd", "EeFfGgHh",
and "IiJjKkLl". Assuming that List1 currently shows the numbers,
when "Letters" is selected from the drop down list in Combo1,
the list is closed, and List1 will look like this:
+--------------------------+
| A2345 |
| E78919 |
| I1 12 13 14 15 |
+--------------------------+
The list will repaint itself when it recieves focus, but this looks
highly unprofessional.
Please note that this problem only occurs when the item is selected
using the keyboard. If the user used a mouse, then the list is
first hidden, then the click event is initiated. Therefore when the
list is updated, nothing rests on top of it.
Solution:
The secret is well placed REFRESH methods. You will need to include
the following code for the combo box:
SUB Combo1_KeyUp (KeyCode AS INTEGER, Shift AS INTEGER)
SELECT CASE KeyCode
CASE 115 '-- <F4>
List1.REFRESH
CASE 38, 40 '-- <Up> <Down>
'-- Check for <Alt> key
IF Shift AND 4 THEN List1.REFRESH
END SELECT
END SUB
SUB Combo1_LostFocus()
List1.REFRESH
END SUB
>>> Continued to next message
* SLMR 2.1a * Help me! Someone turned reality back on.
--- Maximus 2.00

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET