Microsoft KB Archive/156630

= PRB: Incremental Search with Grid Causes Screen Flicker =

Article ID: 156630

Article Last Modified on 10/15/2003

-

APPLIES TO


 * Microsoft Visual FoxPro 5.0 Standard Edition
 * Microsoft Visual FoxPro 6.0 Professional Edition

-



This article was previously published under Q156630



SYMPTOMS
The Refresh method of the Grid control does not move the record pointer in the grid to the selected record when the record pointer is moved from a control external to the grid. The grid has to get the focus in order for the record pointer in it to move to the selected record. Because of this problem, an incremental search routine, involving the grid and another control, causes the screen to flicker every time a character is entered.

This article describes a way to avoid the screen flicker when using an incremental search routine with a grid.



WORKAROUND
You can use the LockScreen property of the Form to eliminate most of the screen flicker. For example, you can make the following modifications to the Form created in the STEPS TO REPRODUCE BEHAVIOR section below:

 Create a New Property for the Form and name it lRefreshingGrid. Set the property to .F.  Change the code in Text1.InterActiveChange event as follows: ThisForm.lRefreshingGrid = .T.     ThisForm.LockScreen = .T.      SELECT customer SEEK UPPER(ALLTRIM(ThisForm.Text1.Value)) ThisForm.grid1.SetFocus ThisForm.text1.SetFocus ThisForm.LockScreen = .F.     ThisForm.lRefreshingGrid = .F.                              To ensure that the Valid event of the text box does not fire when the focus is moved to the grid and then back to the text box, add the following code to the Valid event of the text box: IF ThisForm.lRefreshingGrid RETURN .T.     ENDIF 



STATUS
Microsoft is researching this behavior and will post new information here in the Microsoft Knowledge Base as it becomes available.



Steps to Reproduce Behavior
 Create a Form, and set the LockScreen property to False (.F.). Add the Customer table, in the home+"SAMPLES\DATA" folder, to the Data Environment. By default, the table is added to the Data Environment with the Name "cursor1". Set the Order property of the cursor to "cust_id".</li> Drag the table onto the form to create a grid. Set the Name property of the Grid to "Grid1".</li>  Add a TextBox control to the form. Make sure that SelectOnEntry property of the Textbox control is set to .F. (the default). Add the following code to the TextBox control's InterActiveChange event: SELECT customer SEEK UPPER(ALLTRIM(This.Value)) ThisForm.Grid1.Refresh </li> Run the Form and type a few characters in the text box.</li> Although the REFRESH method of the grid is being called from Text1.InterActiveChangeEvent, the record pointer in the grid does not move to the correct record.</li>  Now change the code in Text1.InterActiveChange event as follows: SELECT customer SEEK UPPER(ALLTRIM(This.Value)) ThisForm.grid1.SetFocus ThisForm.text1.SetFocus </li> Repeat step 5.</li> Now the Record Pointer in the grid is moving correctly but there is a lot of screen flicker every time a character is entered into the text box.</li></ol>

Additional query words: kbdse VFoxWin Flash

Keywords: KB156630

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.