VB Grid Custom Control: Surprising Results when FillStyle=1

ID Number: Q80849

1.00

WINDOWS

buglist1.00

Summary:

When the Grid custom control has its FillStyle property set to 1

(repeat), assignments to the Text and Picture properties store a value

in all the cells within the selected region (determined by

SelStartCol, SelStartRow, SelEndCol, and SelEndRow). However, the

value returned from Text and Picture comes from the current cell

(determined by the Col and Row properties). This behavior can produce

surprising results when the current cell is located outside the

selected region.

When FillStyle is 0 (single), the Text and Picture properties store to

the current cell and retrieve from the current cell.

This information applies to the Grid custom control provided with

Microsoft Professional Toolkit for Microsoft Visual Basic programming

system version 1.0 for Windows.

More Information:

The CellSelected property returns True (-1) if the current cell is

within the grid's selected region; otherwise, CellSelected returns

False (0).

Workaround

----------

To cause the Text property to return the same value assigned when

FillStyle=1, set the current cell location to a cell inside the

selected region. For example:

Grid1.Text = "hello"

Grid1.Col = Grid1.SelColStart

Grid1.Row = Grid1.SelRowStart

' Length of Text is 5

MsgBox "Len(Text)=" + Format$(Len(Grid1.Text))

Steps to Reproduce Problem

--------------------------

1. Run Visual Basic or, if Visual Basic is already running, choose New

Project from the File menu (ALT, F, N). Form1 will be created by

default.

2. From the File menu, choose Add File, and select GRID.VBX. The Grid

tool will appear in the Toolbox.

3. Select the Grid tool from the Toolbox, and place a grid named

Grid1 on Form1.

4. On the Properties bar, set the grid properties Cols and Rows each

to 4.

5. Size the grid so that you can see all the cells.

6. Double-click the form to bring up the Code window. In the Procedure

box, select Load. Enter the following code:

Sub Form_Load ()

Grid1.FillStyle = 1 ' repeat

' Set selected region

Grid1.SelStartCol = 2

Grid1.SelStartRow = 2

Grid1.SelEndCol = 3

Grid1.SelEndRow = 3

' Set current cell, outside of selected region

Grid1.Col = 1

Grid1.Row = 1

' Assign to Text

Grid1.Text = "hello"

' Length of Text is 0, not 5

Show

MsgBox "Len(Text)=" + Format$(Len(Grid1.Text))

End Sub

7. Press F5 to run the program.

Additional reference words: 1.00