[VB6] auto-aanvul datagrid ( deels werkend )

Pagina: 1
Acties:

  • fluppie007
  • Registratie: April 2005
  • Laatst online: 28-11 11:17
Beste Allemaal,

Ik heb ahv een auto-aanvul code voot textboxen ( met waarders uit een list ) eentje gemaakt om een datagrid-cell automatisch aan te vullen, nu werkt het redelijk, enkel wanneer hij de voorgestelde match erbij zet en je typt verder, dan typt hij verder na het woord en overschrijft hij niet. Bij een tekstbox werkt de code prima, maar bij de grid niet. Ik begrijp niet goed waarom hij dit doet, wanneer je dan de voorgestelde tekst wist met backspace en verder typt gaat het goed, enkel is dit echt niet gebruiksvriendelijk. Wie is er reeds bekend met dit probleem ? Wat ook wel moet werken volgens mij is in de betreffende column & cell van de datagrid een textbox invoegen, enkel lijkt mij dit nogal omslachtig.
Volgens mij heeft het iets te maken met het seltext-en van de tekst die anders werkt bij de datagrid
Hieronder de gebruikte code voor het auto-aanvullen.
[CODE=vb]
Option Explicit

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any _
) As Long

Const LB_FINDSTRING = &H18F

Dim Rs As adodb.Recordset
Dim DelKey As Boolean
Dim bNoClick As Boolean

Private Sub DGrid_Change()
'autoaanvullen
Dim strt As Long, nIndex As Long
Dim nLen As Long, sText As String
Const LB_GETTEXTLEN As Long = &H18A
Const LB_GETTEXT As Long = &H189
Static blnBusy As Boolean

If blnBusy Then
Exit Sub
End If

bNoClick = True
blnBusy = True

'lijstindex opvragen
ProductLijst.ListIndex = SendMessage(ProductLijst.hwnd, LB_FINDSTRING, -1, ByVal CStr(DGrid.Text))

If Not DelKey Then


If ProductLijst.ListIndex <> -1 Then
strt = Len(DGrid.Text)
DGrid.Text = ProductLijst.List(ProductLijst.ListIndex)
DGrid.SelStart = strt
DGrid.SelLength = Len(DGrid.Text) - strt
Else

End If
End If
DelKey = False
blnBusy = False
bNoClick = False

End Sub

Private Sub DGrid_Click()
'bij aanklikken alle tekst selecteren
DGrid.SelStart = 0
DGrid.SelLength = Len(DGrid.Text)
End Sub

Private Sub DGrid_KeyDown(KeyCode As Integer, Shift As Integer)
'Delete en BackSpace "detectie"
If KeyCode = vbKeyDelete Or KeyCode = 8 Then

DelKey = True
Exit Sub

ElseIf KeyCode = vbKeyDown Then
ProductLijst.SetFocus
End If
End Sub
[/CODE=vb]