Avatar billede isdan Nybegynder
15. februar 2001 - 12:12 Der 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
Avatar billede nolle_k Nybegynder
15. februar 2001 - 13:11 #1
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
Avatar billede nolle_k Nybegynder
15. februar 2001 - 13:12 #2
Ups!!

Private Sub ComBo1_KeyUp(KeyCode As Integer, Shift As Integer)
  SearchControl Combo1, KeyCode 
End Sub
Avatar billede isdan Nybegynder
15. februar 2001 - 14:01 #3
Det virker fint... Men ComboBoxet indehoder
Tal,  3 mellemrum, også Navn

Så hvis ikke tal så skal den kunne søge i navn.
Avatar billede nolle_k Nybegynder
15. februar 2001 - 14:05 #4
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!
Avatar billede nolle_k Nybegynder
15. februar 2001 - 14:06 #5
DU mener at hvis man skriver \"Bred\" så foreslår den 190 Bredgade eller hva???
Avatar billede isdan Nybegynder
15. februar 2001 - 14:12 #6
Det var engang 2 combobox... Men at combinere det i et er absolut det optimale... Når jeg har flere f.eks.  Postnr/By o.s.v

Og det med
DU mener at hvis man skriver \"Bred\" så foreslår den 190 Bredgade eller hva???
Er svaret ja..
Avatar billede nolle_k Nybegynder
15. februar 2001 - 14:14 #7
OK!! Den er jo lidt mere tricky!!

Ser om jeg får tid!!
Avatar billede isdan Nybegynder
15. februar 2001 - 14:16 #8
Ja men du er kun en mm. fra de 400 point..
Avatar billede nolle_k Nybegynder
15. februar 2001 - 14:17 #9
OK!!
Avatar billede nolle_k Nybegynder
16. februar 2001 - 11:28 #10
Så skulle den være der!!

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
Avatar billede infojens Nybegynder
19. februar 2001 - 22:10 #11

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

Avatar billede infojens Nybegynder
19. februar 2001 - 22:14 #12

Lidt forkert

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...

Håber jeg er til at forstå ;0)
Avatar billede infojens Nybegynder
19. februar 2001 - 23:51 #13

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(
Avatar billede nolle_k Nybegynder
20. februar 2001 - 09:06 #14
Så prøv min kope! Den kan!!!
Avatar billede nolle_k Nybegynder
20. februar 2001 - 09:06 #15
min kode selvfølgelig!
Avatar billede infojens Nybegynder
20. februar 2001 - 09:37 #16
Det har jeg prøvet ....

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...

Avatar billede nolle_k Nybegynder
20. februar 2001 - 09:50 #17
Hvordan det????  Hvad står der i Combo listen der gør det der???
Avatar billede nolle_k Nybegynder
20. februar 2001 - 09:51 #18
Men det er nu engang sådan at opgaven er defineret! At hvis der står

Hans Thomas
Thomas Jensen

Så vil den vælge \"Hans Thomas\" hvis du trykker T!!
OK jeg kan se det! En mindre detalje!

Avatar billede infojens Nybegynder
20. februar 2001 - 09:56 #19
Avatar billede nolle_k Nybegynder
20. februar 2001 - 12:30 #20
En mindre rettelse er lavet!

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
                       
          .SelStart = Lenght + (Start - 1)
          .SelLength = Len(.List(i)) - Lenght
          i = .ListCount + 1
          SpaceFound = False
        End If
\'        pos = InStr(Start, .List(i), \" \")
\'        Start = pos + 1
     
      Next i
      Number = Number + 1
    Loop While (SpaceFound)
  End With
End Function
Avatar billede isdan Nybegynder
21. februar 2001 - 14:18 #21
Det er super jeg fik også mindre problemer med koden men nu virker den...

UCase manglede . Den anbefalede kun det første tegn

Plus hvis du har de her 2 stringe i comboen

Postn      By
5020      NogetSted Med gade nr 20

Så hoper den til 2 ved gade navn når man vil forsætte ved postnr... Men pointene er vel tjente..
Avatar billede nolle_k Nybegynder
21. februar 2001 - 14:22 #22
Er der noget galt med koden? Jeg kan ikke lige gennemskue hvad det er du siger i din kommentar!!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester