title: Why is my code Selecting & Hightlighting more than 1 row in my MshFlexgrid?
body: <p>I have a VB6 project that is using a SQL2008 database.  The project consists of two Combo Boxes , a MSHFlexGrid, and Two Command Buttons(cmdLoadSeries &amp; cmdExit).  The user will make a selection from the first Combo box and press the cmdLoadSeries command button which populates the 2nd combo box and the MSHFlexgrid.  I am using a text box to manipulate the info in the grid.</p>
  
  <p>The First time I select a line in the mshflexgrid it selects/Highlights the row i clicked on and everything above it as well.  After the first time, it only selects/highlights the row I clicked on.  Why? Please help.</p>
  
  <p>Here is my code:</p>
  
  <pre><code>Private Sub cmdLoadSeries_Click()
  Const cProcName = msModuleName &amp; "cmdLoadSeries"
  
  'Too save space I removed the code that retrieves MRecordSet.
  If mRecordSet.RecordCount &gt; 0 Then
      LoadControls
      SetFormFields True
      DataCombo1.BoundText = mRecordSet2.Fields(0)
  Else
      LoadControls
      cmdExit.Enabled = True
  End If
  
  cmdLoadSeries.Enabled = False
  Combo1.Enabled = False
  
  End Sub
  
  Private Sub LoadControls()
  Const cProcName = msModuleName &amp; "LoadControls"
  
  With mRecordSet
  
      OpenRSFlexGrid1
      FillFlexGrid1
  
  End With
  
  End Sub
  
  Sub OpenRSFlexGrid1
  'This code setups a recordset used to populate the mshflexgrid with
  End Sub
  
  Sub FillFlexGrid1(Optional pbClear As Boolean)
  
  Const cProcName = msModuleName &amp; "FillFlexGrid1"
  
  Dim llCntrRow           As Integer
  Dim llCntrCol           As Integer
  Dim max_len             As Single
  Dim new_len             As Single
  Dim liCntr              As Integer
  Dim llCol               As Long
  
  Text1.BorderStyle = 0
  With MSFlexGrid1
      MSFlexGrid1.Clear
      Text1.FontName = .FontName
      Text1.FontSize = .FontSize
      Text1.Visible = False
      .Cols = mRecordset4.Fields.Count
      .FixedCols = 1
      If mRecordset4.RecordCount &gt; 0 And (Not pbClear = True) Then
          .Rows = mRecordset4.RecordCount + 1
          .FixedRows = 1
      Else
          .Rows = 2
          .FixedRows = 1
      End If
      For llCntrCol = 0 To .Cols - 1
          .TextMatrix(0, llCntrCol) = mRecordset4.Fields(llCntrCol).Name
      Next
  
      If mRecordset4.RecordCount &gt; 0 And (Not pbClear = True) Then
          mRecordset4.MoveFirst
          For llCntrRow = 1 To mRecordset4.RecordCount
              For llCntrCol = 0 To .Cols - 1
                  .TextMatrix(llCntrRow, llCntrCol) =           Trim(CStr(mRecordset4.Fields(llCntrCol).Value))
              Next
              mRecordset4.MoveNext
          Next
      Else
          For llCntrCol = 0 To .Cols - 1
              .TextMatrix(.FixedRows, llCntrCol) = ""
          Next
      End If
  
      Font.Name = MSFlexGrid1.Font.Name
      Font.Size = MSFlexGrid1.Font.Size
      For llCntrCol = 0 To MSFlexGrid1.Cols - 1
          max_len = 0
          If .TextMatrix(0, llCntrCol) = "setoutid" Then
              MSFlexGrid1.ColWidth(llCntrCol) = TextWidth("W") * 0.54
          Else
              For llCntrRow = 0 To MSFlexGrid1.Rows - 1
                  new_len = TextWidth(MSFlexGrid1.TextMatrix(llCntrRow, llCntrCol))
  
                  If max_len &lt; new_len Then max_len = new_len
              Next llCntrRow
  
              Dim lsFillColumn    As String
              lsFillColumn = String(42, "W")
              If .TextMatrix(0, llCntrCol) = "setoutname" And TextWidth(lsFillColumn) &gt; max_len Then
                  max_len = TextWidth(lsFillColumn)
              End If
              MSFlexGrid1.ColWidth(llCntrCol) = max_len + (TextWidth("W") * 1.5)
              MSFlexGrid1.ColAlignment(llCntrCol) = flexAlignLeftCenter
          End If
      Next llCntrCol
      .Col = .FixedCols
      .Row = .FixedRows
  End With
  
  Exit Sub
  
  errFillFlexGrid1:
  
  Resume Next
  
  End Sub
  
  Private Sub MSFlexGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
  Const cProcName = msModuleName &amp; "MSFlexGrid1_KeyDown"
  
  On Error GoTo errhandle
  
  With MSFlexGrid1
      If Text1.Visible = False Then
          Select Case KeyCode
  
              Case 45
                  If Shift = 1 Then
                      .AddItem "", .Row + 1
                  Else
                      .AddItem "", .Row
                  End If
                  mbFlexGrid1Changed = True
              Case 46
                  If MSFlexGrid1.Rows = .FixedRows + 1 Then
                      MSFlexGrid1.Rows = MSFlexGrid1.Rows + .FixedRows - 1
                  Else
                      .RemoveItem .Row
                  End If
                  mbFlexGrid1Changed = True
          End Select
      End If
  End With
  Exit Sub
  
  errhandle:
  
  Resume Next
  End Sub
  
  Private Sub Text1_LostFocus()
  Const cProcName = msModuleName &amp; "Text1_LostFocus"
  
  On Error GoTo errhandle
  
  If Text1.Visible Then
      MSFlexGrid1.Text = Text1.Text
  End If
  Text1.Visible = False
  Exit Sub
  
  errhandle:
  
  Resume Next
  End Sub
  
  Private Sub MSFlexGrid1_GotFocus()
  Const cProcName = msModuleName &amp; "MSFlexGrid1_GotFocus"
  
  On Error GoTo errhandle
  bLostFocus = False
  
  pSetTabStop (True)
  
  If mlCurrentCol &gt; 0 Then
      MSFlexGrid1.Col = mlCurrentCol
      MSFlexGrid1.Row = mlCurrentRow
  End If
  
  mlCurrentCol = 0
  mlCurrentRow = 0
  If Text1.Visible Then
      MSFlexGrid1.Text = Text1.Text
      Text1.Visible = False
  End If
  
  Exit Sub
  
  errhandle:
  
  Resume Next
  End Sub
  Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
  Const cProcName = msModuleName &amp; "MSFlexGrid1_KeyPress"
  
  On Error GoTo errhandle
  
  Select Case KeyAscii
      Case 27
          If Text1.Visible Then
              Text1.Visible = False
          End If
      Case Else
          FlexGridEdit KeyAscii
  End Select
  Exit Sub
  
  errhandle:
  
  Resume Next
  End Sub
  
  Private Sub MSFlexGrid1_LeaveCell()
  Const cProcName = msModuleName &amp; "MSFlexGrid1_LeaveCell"
  
  On Error GoTo errhandle
  
  If Text1.Visible Then
      MSFlexGrid1.Text = Text1.Text
      Text1.Visible = False
  End If
  Exit Sub
  
  errhandle:
  
  Resume Next
  End Sub
  
  Private Function FlexGridChkPos(KeyCode As Integer) As Boolean
  Dim llNextRow   As Long
  Dim llNextCol   As Long
  Dim llCurrCol   As Long
  Dim llCurrRow   As Long
  Dim llTotCols   As Long
  Dim llTotRows   As Long
  Dim llBegRow    As Long
  Dim llBegCol    As Long
  Dim llCntrCol   As Long
  Dim lsText      As String
  
  Const cProcName = msModuleName &amp; "FlexGridChkPos"
  
  On Error GoTo errhandle
  
  With MSFlexGrid1
  
      llCurrRow = .Row + 1
      llCurrCol = .Col + 1
      llTotRows = .Rows
      llTotCols = .Cols
      llBegRow = .FixedRows
      llBegCol = .FixedCols
  
      If KeyCode = vbKeyRight Or KeyCode = vbKeyReturn Then
          llNextCol = llCurrCol + 1
          If llNextCol &gt; llTotCols Then
              llNextRow = llCurrRow + 1
              If llNextRow &gt; llTotRows Then
                      GoSub LogLine
                      .Rows = .Rows + 1
                      llCurrRow = llCurrRow + 1
                      llCurrCol = 1 + llBegCol
              Else
                  llCurrRow = llNextRow
                  llCurrCol = 1 + llBegCol
              End If
          Else
              llCurrCol = llNextCol
          End If
      End If
  
      If KeyCode = vbKeyLeft Then
          llNextCol = llCurrCol - 1
          If llNextCol = llBegCol Then
              llNextRow = llCurrRow - 1
                  If llNextRow = llBegRow Then
                      llCurrRow = llTotRows
                  Else
                      llCurrRow = llNextRow
                  End If
              llCurrCol = llTotCols
          Else
              llCurrCol = llNextCol
          End If
      End If
  
      .Col = llCurrCol - 1
      .Row = llCurrRow - 1
  End With
  Exit Function
  
  LogLine:
  
  lsText = ""
  Return
  
  errhandle:
  
  Resume Next
  End Function
  </code></pre>