Avatar billede jastine Nybegynder
27. juni 2006 - 13:17 Der er 5 kommentarer

indlæsning af string i combobox

jeg har lavet en dropdown combobox, der indlæser sine strenge fra en fil. nu skal jeg hente en record fra en database og comboboxen skal vise den streng der svarer til det jeg får fra databasen. jeg ved godt at jeg kan bruge combo.text = combo.list(index), men hvordan finder jeg på en nem måde det korrekte index?

Jeg kan ikke gøre dette direkte(combo.Text = minTekst), da jeg så får den besked at Text-properti'en er read-only, så jeg skal vælge et element fra listen.
Avatar billede sjh Nybegynder
27. juni 2006 - 21:11 #1
' ------------------------------ Form1 ------------------------------
Option Explicit

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

Public Enum emuConst
      CB_FINDSTRINGEXACT = &H158 ' ComboBox
      CB_FINDSTRING = &H14C      ' ComboBox Match
      LB_FINDSTRINGEXACT = &H1A2 ' ListBox
      LB_FINDSTRING = &H18F      ' ListBox Match
End Enum

Public Function FindListIndex(Control As Object, strText As String, eConst As emuConst) As Long
Dim nIndex As Long
  nIndex = -1
  If TypeOf Control Is ListBox Then
    nIndex = SendMessage(Control.hWnd, eConst, -1, ByVal strText)
  ElseIf TypeOf Control Is ComboBox Then
    nIndex = SendMessage(Control.hWnd, eConst, -1, ByVal strText)
  End If
  FindListIndex = nIndex
End Function

Private Sub Form_Load()
  With Combo1
      .AddItem "Visual"
      .AddItem "Basic"
      .AddItem "VBA"
      .AddItem "VB.NET"

      ' Her vil vi gerne finde 'Basic' men vil ikke skrive hele teksten. (ba)
      .ListIndex = FindListIndex(Combo1, "ba", CB_FINDSTRING)

      ' Her vil vi gerne finde 'Basic' men det skal være hele teksten. (basic)
      .ListIndex = FindListIndex(Combo1, "basic", CB_FINDSTRINGEXACT)
  End With
End Sub
' ------------------------------ Form1 ------------------------------
Avatar billede jastine Nybegynder
03. juli 2006 - 09:29 #2
det kan da ikke passe at man skal kode sig ud af det, er der virkelig ikke en smart måde at gøre det på?????
Avatar billede sjh Nybegynder
03. juli 2006 - 10:17 #3
Hvem siger at det skal være smart??

det er jo ikke for sjovt "man" bliver programmør..

men hvis du bedre kan uden API så gør du bare sådan..

Private Sub Form_Load()
Dim i As Integer
Dim strText As String

  strText = "vBa"
  strText = LCase$(strText)

  With Combo1
      .AddItem "Visual"
      .AddItem "Basic"
      .AddItem "VBA"
      .AddItem "VB.NET"
      For i = 0 To (.ListCount - 1)
        If LCase$(.List(i)) = strText Then
          .ListIndex = i
          Exit For
        End If
      Next
  End With
End Sub
Avatar billede jastine Nybegynder
01. august 2006 - 12:12 #4
hmm...er nok lidt forvænt med features fra C#, men tak for forsøget.
Avatar billede sjh Nybegynder
01. august 2006 - 17:06 #5
Kan det gørres mere smart i C# da?
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