webForumDet fria alternativet

OnEnter?

11 svar · 306 visningar · startad av Vide

VideMedlem sedan dec. 19998 577 inlägg
#1

Tjena,

Ytterligare en nybörjarfråga:
Hur gör jag så att en sub körs när jag trycker enter i en textbox?

Alltså, istället för att man skall behöva trycka på en knapp (_Click) så vill jag ha eventet för en enter-tryckning.

Mvh, Vide

nikoMedlem sedan juni 20022 599 inlägg
#2
Private Sub DinTextBox_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        'Din kod här ..
    End If
End Sub
VideMedlem sedan dec. 19998 577 inlägg
#3

Tack skall du ha :)

Finns det någon stans man kolla upp alla sådana events?

nikoMedlem sedan juni 20022 599 inlägg
#4

Ett enkelt sätt är att trycka F2 för att få upp Object Browsern. I listan t. vä. kan man sen välja den komponent man är intresserad av (tex TextBox). I listan t. hö. får man då upp alla metoder, properties och events för det valda objektet tillsammans med en kort beskrivning. Vill man ha mer detaljerad info får man nog söka sig till MSDN i vanlig ordning ..

VideMedlem sedan dec. 19998 577 inlägg
#5

Sådärja, tackar! :)

VideMedlem sedan dec. 19998 577 inlägg
#6

... och om jag vill loopa igenom det som finns i listboxen för att se vilka som selected, hur gör jag då?

I VBS finns det ju "for each item in object", finns det något liknande här?

nikoMedlem sedan juni 20022 599 inlägg
#7

"for each nånting in nånting" finns i både VB och VBScript fast i båda fallen används det bara när man loopar igenom en collection.

Eftersom elementen i en listbox inte utgör en collection så får man nog loopa via index, skulle jag tro ..

VideMedlem sedan dec. 19998 577 inlägg
#8

Har denna kod nu, men får fel på RemoveItem-raden:

Private Sub btnDeleteUser_Click()
    Dim i As Integer
    For i = 0 To Names.ListCount
      If Names.Selected(i) Then
        Names.RemoveItem (i)
      End If
    Next
End Sub

Det står ju att man skall använda index till den...

nikoMedlem sedan juni 20022 599 inlägg
#9

Du får problem med for-loopen eftersom du plockar bort element i listan.

Om det är en single-select så kan du kanske skriva så här:

    Dim i As Integer
    For i = 0 To Names.ListCount - 1
      If Names.Selected(i) Then
        Names.RemoveItem (i)
        Exit Sub
      End If
    Next
VideMedlem sedan dec. 19998 577 inlägg
#10

Ah, det är sant. Så eftersom jag har en multi så måste jag göra en rekursiv loop eller? Och måste jag då göra en refresh av listan eller fixas det ändå?

nikoMedlem sedan juni 20022 599 inlägg
#11

Så eftersom jag har en multi så måste jag göra en rekursiv loop eller?

Nej, det blir faktiskt enklare än så (kom jag på i efterhand):

    Dim i As Integer
    For i = Names.ListCount - 1 To 0 Step -1
        If Names.Selected(i) Then Names.RemoveItem i
    Next i

Refresh behövs inte det är inbakat i RemoveItem.

VideMedlem sedan dec. 19998 577 inlägg
#12

Ah, smart! :D

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)