[vb6] Hoe navigeren in listbox terwijl tekstbox focus heeft?

Pagina: 1
Acties:

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Op een VB6 formuliertje heb ik een tekstbox en een listbox. Als ik iets in de tekstbox intyp wordt in een access-tabel gekeken welke records met deze zoekterm overeenkomen (via SQL). Deze worden weergegeven in de listbox.

Nu wil ik dat ik terwijl de muiscursor in het search-tekstboxje staat via de UP- en DOWN-keys van het toetsenbord door de waardes in de listbox kan navigeren (net als in de Windows-Help). Ik heb geen idee hoe ik dit voor elkaar kan krijgen.

Hoe kan ik ervoor zorgen dat de UP- en DOWN-keys navigatie door de listbox triggeren terwijl de muiscursor nog in het tekstboxje staat?

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 17:52

RayNbow

Kirika <3

Visual Basic 6:
1
2
3
4
5
6
7
8
9
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyDown And List1.ListIndex < List1.ListCount - 1 Then
        List1.ListIndex = List1.ListIndex + 1
        KeyCode = 0
    ElseIf KeyCode = vbKeyUp And List1.ListIndex > 0 Then
        List1.ListIndex = List1.ListIndex - 1
        KeyCode = 0
    End If
End Sub


Nadeel is, is dat je cursor in je Textbox naar links/rechts beweegt als je op omhoog/benee drukt.

Edit: Ok, heb voor het vorige probleem een oplossing, zie de aangepaste code. Ik maak namelijk de KeyCode 0, zodat de Textbox zelf niets met de toetsaanslag doet ;)

[ Voor 37% gewijzigd door RayNbow op 08-10-2003 20:38 ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
RayNbow schreef op 08 October 2003 @ 20:34:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyDown And List1.ListIndex < List1.ListCount - 1 Then
        List1.ListIndex = List1.ListIndex + 1
        KeyCode = 0
    ElseIf KeyCode = vbKeyUp And List1.ListIndex > 0 Then
        List1.ListIndex = List1.ListIndex - 1
        KeyCode = 0
    End If
End Sub


Nadeel is, is dat je cursor in je Textbox naar links/rechts beweegt als je op omhoog/benee drukt.

Edit: Ok, heb voor het vorige probleem een oplossing, zie de aangepaste code. Ik maak namelijk de KeyCode 0, zodat de Textbox zelf niets met de toetsaanslag doet ;)
Dit werkt perfect met een listbox...een datalist kent de properties ListIndex en Count echter niet. Heb al zitten klooien met de eigenschappen SelectedItem en VisibleCount maar dit zijn volgens mij niet de juiste eigenschappen. Hoe krijg ik dit voor elkaar met een datalist? Wat zijn de juiste eigenschappen?

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Hoe is de index gedefinieerd in een DataList? In een Listbox gaat het met ListIndex.

[ Voor 3% gewijzigd door EmilneM op 09-10-2003 16:39 ]


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Kom er nog steeds niet uit, weet de juiste properties van de DataList niet. Is het ook mogelijk om met code een toetsenbordaanslag (Down) te simuleren?

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 17:52

RayNbow

Kirika <3

SetFocus method op de DataList, dan SendKeys statement gebruiken (zie MSDN)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
RayNbow schreef op 10 October 2003 @ 16:39:
SetFocus method op de DataList, dan SendKeys statement gebruiken (zie MSDN)
SendKeys "{Down}" werkt goed. Moet nu alleen na de toetsaanslag de focus weer in het tekstboxje krijgen, de selectie in de datalist moet in stand blijven.

Dit lijkt het programma niet leuk te vinden.....muiscursor is even niet meer te bewegen en programma flipt.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub txtSearch_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyDown Then
        DataList1.SetFocus
        SendKeys "{Down}"
        KeyCode = 0
        txtSearch.SetFocus
    ElseIf KeyCode = vbKeyUp Then
        DataList1.SetFocus
        SendKeys "{Up}"
        KeyCode = 0
        txtSearch.SetFocus
    End If

End Sub

[ Voor 8% gewijzigd door EmilneM op 11-10-2003 17:08 ]


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 17:52

RayNbow

Kirika <3

Hmm, ik heb 't zelf ff gecheckt... Idd, het ziet er naar uit dat er een oneindige lus ontstaat...

Edit:

Okaaaaay... Ik heb een oplossing gevonden, maar waarschijnlijk niet zo'n mooie. Maar ach, het werkt :P
(Het werkt tenminste voor een ListBox)

Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'Variabele die ervoor zorgt dat wanneer de DataList de focus krijgt
'van de TextBox, dat de DataList de focus teruggeeft
Dim InputFromTextBox As Boolean

Private Sub DataList1_Click()
    If InputFromTextBox Then
        InputFromTextBox = False
        txtSearch.SetFocus
    End If
End Sub

Private Sub txtSearch_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyDown Then
        DataList1.SetFocus
        SendKeys "{Down}"
        KeyCode = 0
        InputFromTextBox = True
    ElseIf KeyCode = vbKeyUp Then
        DataList1.SetFocus
        SendKeys "{Up}"
        KeyCode = 0
        InputFromTextBox = True
    End If

End Sub


Edit 2:

En mocht de bovenstaande code niet werken met een DataList, probeer het volgende:

Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option Explicit

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

'Message
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101

'wParam
Private Const VK_UP = &H26
Private Const VK_DOWN = &H28

Private Sub txtSearch_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyDown Then
        SendMessage DataList1.hwnd, WM_KEYDOWN, VK_DOWN, 0
        KeyCode = 0
    ElseIf KeyCode = vbKeyUp Then
        SendMessage DataList1.hwnd, WM_KEYDOWN, VK_UP, 0
        KeyCode = 0
    End If
End Sub

[ Voor 113% gewijzigd door RayNbow op 11-10-2003 22:22 ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir

Pagina: 1