15. februar 2001 - 12:12Der er
21 kommentarer og 1 løsning
ComboBox
Jeg har en tabel i database med 2 felter nr/navn og ca 400 records..
Hele indeholdet læser jeg ind i Array
Array1(0,nr) Array1(1,navn)
Så add\'er jeg combobox.AddItem Array1(0,nr) & \" \" & Array1(1,navn)
Så virker det...(Combo boxet er nu fyldt op)
Selve problemet er at når man indtaster i comboboxet skal den foreslå resten..
Det vil sige hvis jeg har 190 Bredgade i comboboxen og skriver 1 som første tegn så foreslår den 190 Bredgade og tegn nr 2 som er 9 er markeret så hvis jeg taster 3 så forslår den f.eks 131 Lundevej o.s.v Skal virke til både nr og navn
Public Function SearchControl(Ctrl As Object, KeyCode As Integer) As Boolean Dim i As Integer
Dim Lenght As Integer, Str As String
SearchControl = False
Select Case KeyCode Case vbKeyDown, vbKeyUp, vbKeyLeft, vbKeyRight, vbKeyBack, vbKeyDelete, _ vbKeyControl, vbKeyShift, vbKeyHome, vbKeyReturn Exit Function End Select
Select Case TypeName(Ctrl) Case \"ComboBox\", \"ComboBoxEx\"
Dim Cmb As Object Set Cmb = Ctrl
With Cmb Str = UCase(.Text) Lenght = Len(Str)
For i = 0 To .ListCount - 1 If (Left(.List(i), Lenght) = Str) Then If (.List(i) <> .Text) Then .Text = .List(i) End If If (Lenght = Len(.List(i))) Then SearchControl = True Lenght = 0 End If
.SelStart = Lenght .SelLength = Len(.List(i)) - Lenght i = .ListCount + 1 End If Next i End With Case \"ImageCombo\" Dim ImgCmb As ImageCombo Set ImgCmb = Ctrl With ImgCmb
Str = UCase(.Text) Lenght = Len(Str)
For i = 1 To .ComboItems.Count If (Left(.ComboItems(i), Lenght) = Str) Then If (Not .SelectedItem Is Nothing) Then If (.ComboItems(i) <> .SelectedItem) Then .SelectedItem = .ComboItems(i) End If
If (Len(.ComboItems(i)) = Lenght) Then SearchControl = True Lenght = 0 .SelectedItem = .ComboItems(i) End If Else .SelectedItem = .ComboItems(i) End If .SelStart = Lenght .SelLength = Len(.ComboItems(i)) - Lenght \'End Loop i = .ComboItems.Count + 1 End If Next i End With End Select End Function
Denne funtion kan både bruges til ComboBox og ImageCombo!!
Du gør følgende
Private Sub ComBo1_KeyUp(KeyCode As Integer, Shift As Integer) SearchControl Combo1 End Sub
Var det ikke lettere at lave to ComboBox hvor den ene indeholder tal og den anden indeholder Navn! Og så afhængigt af hvilken man indtaster så kommer det ønskede frem!
Public Function SearchControl(Ctrl As Object, KeyCode As Integer) As Boolean Dim i As Integer
Dim Lenght As Integer, Str As String Dim Start As Integer, pos As Integer
SearchControl = False
Select Case KeyCode Case vbKeyDown, vbKeyUp, vbKeyLeft, vbKeyRight, vbKeyBack, vbKeyDelete, _ vbKeyControl, vbKeyShift, vbKeyHome, vbKeyReturn Exit Function End Select
Start = 1
Dim Cmb As Object Set Cmb = Ctrl
With Cmb Str = UCase(.Text) Lenght = Len(Str)
For i = 0 To .ListCount - 1 Do If (Mid(UCase(.List(i)), Start, Lenght) = Str) Then If (UCase(.List(i)) <> .Text) Then .Text = .List(i) End If If (Lenght = Len(.List(i))) Then SearchControl = True Lenght = 0 End If
.SelStart = Lenght + (Start - 1) .SelLength = Len(.List(i)) - Lenght i = .ListCount + 1 End If pos = InStr(Start, .List(i), \" \") Start = pos + 1 Loop While (pos > 0) Next i End With End Function
Jeg har siddet og fuldt med i denne debat og har selv prøvet jeg for ingen fejl, men min anbefalere også efternavn som et muligt fornavn og det er jo ikke meningen kan i se hvad jeg har gjort forkert..
Public Function SearchControl(Ctrl As Object, KeyCode As Integer) As Boolean Dim i As Integer
Dim Lenght As Integer, Str As String Dim Start As Integer, pos As Integer
SearchControl = False
Select Case KeyCode Case vbKeyDown, vbKeyUp, vbKeyLeft, vbKeyRight, vbKeyBack, vbKeyDelete, _ vbKeyControl, vbKeyShift, vbKeyHome, vbKeyReturn Exit Function End Select
Start = 1
Dim Cmb As Object Set Cmb = Ctrl
With Cmb Str = UCase(FrmNy.Text2.Text) Lenght = Len(Str)
For i = 0 To FrmNy.Text2.ListCount - 1 Do If (Mid(UCase(FrmNy.Text2.List(i)), Start, Lenght) = Str) Then If (UCase(FrmNy.Text2.List(i)) <> FrmNy.Text2.Text) Then FrmNy.Text2.Text = FrmNy.Text2.List(i) End If If (Lenght = Len(FrmNy.Text2.List(i))) Then SearchControl = True Lenght = 0 End If
FrmNy.Text2.SelStart = Lenght + (Start - 1) FrmNy.Text2.SelLength = Len(FrmNy.Text2.List(i)) - Lenght i = FrmNy.Text2.ListCount + 1 End If pos = InStr(Start, FrmNy.Text2.List(i), \" \") Start = pos + 1 Loop While (pos > 0) Next i End With End Function
Min combobox hedder Text2 og functionen ligger i et mondul
Den anbefalere mit fornavn som et muligt efternavn og det er ikke så fedt for så har den skrevet et måske forkert fornavn også et muligt efternavn, så kan man jo ikke skrive videre uden at det bliver forkert...
Nu har jeg siddet lidt med det og er kommet frem til denne kode
Dim tel As Long Dim her As Long her = Len(Text2.Text) tel = 1 Do Until tel = FrmNy.Text2.ListCount If Mid(Text2.List(tel), 1, Len(Text2.Text)) = Text2.Text Then Text2.Text = Text2.List(tel) End If tel = tel + 1 Loop Text2.SelStart = her Text2.SelLength = Len(Text2.List(tel)) Text2.SetFocus End Sub
Jeg kan bare ikke få den til kun at markere det som den anbefalere, den markere hele boxen ;0(
Den anbefalere mit fornavn som et muligt efternavn og det er ikke så fedt for så har den skrevet et måske forkert fornavn også et muligt efternavn, så kan man jo ikke skrive videre uden at det bliver forkert...
Public Function SearchControl(Ctrl As Object, KeyCode As Integer) As Boolean Dim i As Integer
Dim Lenght As Integer, Str As String Dim Start As Integer, pos As Integer Dim Number As Integer Dim SpaceFound As Boolean, x As Integer
SearchControl = False
Select Case KeyCode Case vbKeyDown, vbKeyUp, vbKeyLeft, vbKeyRight, vbKeyBack, vbKeyDelete, _ vbKeyControl, vbKeyShift, vbKeyHome, vbKeyReturn Exit Function End Select
Start = 1
Dim Cmb As Object Set Cmb = Ctrl Number = 0
With Cmb Str = UCase(.Text) Lenght = Len(Str)
\'Do
Do For i = 0 To .ListCount - 1 SpaceFound = True For x = 0 To Number - 1 SpaceFound = False pos = InStr(Start, .List(i), \" \") Start = pos + 1 If pos > 0 Then SpaceFound = True End If Next x
If (Mid(UCase(.List(i)), Start, Lenght) = Str) Then If (UCase(.List(i)) <> .Text) Then .Text = .List(i) End If If (Lenght = Len(.List(i))) Then SearchControl = True Lenght = 0 End If
Er der noget galt med koden? Jeg kan ikke lige gennemskue hvad det er du siger i din kommentar!!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.