Avatar billede slapstick Nybegynder
21. november 2003 - 11:35 Der er 31 kommentarer og
1 løsning

brug af listview kontrol

jeg importerer data fra tekstfiler ind i mit program
det data vil jeg så gerne smide i en listview kontrol
antal kolonner og rækker skal bestemmes dynamisk ud fra tekstfilerne
men hvordan gør jeg det på en smart og effektiv måde
har rodet lidt men kan dårligt nok få den til at sætte en eneste række ind
er der nogle der evt har nogle kode eksempler  på noget lignende det jeg skal lave?
eller nogle ideer til hvordan det kunne foregå?
Avatar billede sjh Nybegynder
21. november 2003 - 12:20 #1
hvad skal det bruges til.. er det en oversigt over filer eller hvad.. skal der være Ikoner osv..
Avatar billede slapstick Nybegynder
21. november 2003 - 12:26 #2
nej det er feks komma separerede filer med statistik data så hver linie i tekstfilen skal smides ind på en række i listview kontrollen og hver komma separerede værdi skal ha sin egen kolonne
Avatar billede martin_moth Mester
21. november 2003 - 12:35 #3
Jeg ville læse hver linie ind i en variabel, bruge split på variablen, og smide ind i listview:

  Dim MinString As String
  Dim FilNummer as Integer
  Dim MitArray() as String
  Dim i as long

  Filnummer = FreeFile
  Open "C:\Fil.txt" For Input As #Filnummer
  while not eof(#Filnummer)
    Line Input #Filnummer, MinString
    MitArray = Split(MinString, ",")
    for i = 0 to Ubound(MitArray)   
      'smid posterne fra MitArray ind i ListBox
    Next i
  Close #Filnummer

Har ikke VB her, og kan ikke huske hvordan man smider ind i flere kolonner. Måske er det så simpelt som

  List1.Additem post1 & vbtab & post2

Hvis det er sådan kan du jo danne en string med vbtabs i dit loop
Avatar billede martin_moth Mester
21. november 2003 - 12:37 #4
Søgte lige på eksperten. Du kan gøre sådan her:

ListView1.ListItems.Add 1, , "Peter"
ListView1.ListItems(1).SubItems(1) = "Møller"
ListView1.ListItems(1).SubItems(2) = "12345678"
Avatar billede slapstick Nybegynder
21. november 2003 - 12:37 #5
ok jamen jeg prøver
Avatar billede martin_moth Mester
21. november 2003 - 12:41 #6
Altså - når man kombinerer mine to svar:

  Filnummer = FreeFile
  Open "C:\Fil.txt" For Input As #Filnummer
  while not eof(#Filnummer)
    Line Input #Filnummer, MinString
    intNr = intNr + 1
    MitArray = Split(MinString, ",")
    ListView1.ListItems.Add intNr, , MitArray(0) ' første kolonne
    for i = 1 to Ubound(MitArray)   
      ListView1.ListItems(intNr).SubItems(i) = MitArray(i) 'øvrige kollonner
    Next i
  Close #Filnummer

Der er muligvis fejl - lavet uden VB til at teste. Du kan jo så putte en masse ekstra ind, så programmet ikke crasher, hvis der fx. er en linie uden komma eller en tom linie i filen ;o)
Avatar billede slapstick Nybegynder
21. november 2003 - 12:42 #7
martin moth fandt også selv det samme
men hvis jeg gør sådan her

Form1.lview.ListItems.Add 1, , "bipbip"
Form1.lview.ListItems(1).SubItems(1) = "hejhej"

så adder den bipbip men ved mit subitem der siger den "invalid property value"
Avatar billede martin_moth Mester
21. november 2003 - 12:57 #9
Se hvor simpelt det er med en ListBOX i VBA:

ListBox1.AddItem "Row 1, Col 1"
ListBox1.List(0, 1) = "Row 1, Col 2"
ListBox1.List(0, 2) = "Row 1, Col 3"
Avatar billede sjh Nybegynder
21. november 2003 - 15:05 #10
Avatar billede slapstick Nybegynder
21. november 2003 - 15:10 #11
hmm nu har jeg prøvet med de her to måder at gøre det på

    Form1.lview.ListItems(1).ListSubItems.Add 1, , " 1-55615-906-4"

    Form1.lview.ListItems(1).ListSubItems.Add(1) = "hejhej"

ingen af dem melder fejl men de tilføjer heller ikke nogle subitems i listview kontrollen
tænkte at det måske så var fordi at der kun var default kolonne dvs den første
og at den så derfor måske ikke kunne smide data i en ikke eksisterende
men så burde den sige fejl plus at jeg prøvede at oprette en masse tomme kolonner i properties sheetet
så jeg fatter det simpelthen ik hehe
Avatar billede slapstick Nybegynder
21. november 2003 - 15:10 #12
sjh ok kigger lige på den
Avatar billede slapstick Nybegynder
21. november 2003 - 15:11 #13
ok sjh det der spiller perfekt !!
tak :)
Avatar billede slapstick Nybegynder
24. november 2003 - 15:24 #14
sjh det eksempel du har lavet der
er det til den listview der er med i components 5.0 pakken? for hvis jeg prøver at bruge din metode med den fra component 6.0 pakken så siger den fejl :/
Avatar billede sjh Nybegynder
24. november 2003 - 15:27 #15
Ja det er den nok..
Avatar billede slapstick Nybegynder
24. november 2003 - 15:32 #16
ved du i en hurtig vending hvad der er galt når den siger "type mismatch" ved Set Litem = .ListItems.Add(, , arrData(0)) i det her kodestykke?

Private Sub Form_Load()
Dim i As Long
Dim intFree As Integer
Dim strSplit As String
Dim arrData As Variant
Dim Litem As ListItem

  With ListView1 '<- ListView1
      .View = 3
      .GridLines = True
      .ColumnHeaders.Add , , "Navn1", 1500
      .ColumnHeaders.Add , , "Navn2", 1500
      .ColumnHeaders.Add , , "Navn3", 1500
      .ColumnHeaders.Add , , "Navn4", 1500

      intFree = FreeFile
      Open "File.txt" For Input As #intFree
        While Not EOF(intFree)
          Line Input #intFree, strSplit

          arrData = Split(strSplit, "|")

          Set Litem = .ListItems.Add(, , arrData(0))

          For i = 1 To UBound(arrData)
            Litem.SubItems(i) = arrData(i)
          Next i

        Wend
      Close #intFree
  End With
End Sub
Avatar billede sjh Nybegynder
24. november 2003 - 15:34 #17
har lige prøvet den med:
Micro$oft Windows Common Controls 5.0 (SP2)
Micro$oft Windows Common Controls 6.0 (SP4)

og det virker fint med dem...
Avatar billede slapstick Nybegynder
24. november 2003 - 15:39 #18
ok underligt jeg får bar een type mismatch
men detvar først da jeg satte den fra common controls 6.0 ind
Avatar billede sjh Nybegynder
24. november 2003 - 15:45 #19
ellers prøv den sådan:

Private Sub Form_Load()
Dim i As Long
Dim j As Long
Dim intFree As Integer
Dim strSplit As String
Dim arrData As Variant

  With ListView1 '<- ListView1
      .View = 3
      .ColumnHeaders.Add , , "Navn1", 1500
      .ColumnHeaders.Add , , "Navn2", 1500
      .ColumnHeaders.Add , , "Navn3", 1500
      .ColumnHeaders.Add , , "Navn4", 1500

      intFree = FreeFile
      Open "File.txt" For Input As #intFree
        While Not EOF(intFree)
          Line Input #intFree, strSplit

          arrData = vbSplit(strSplit, "|"): j = j + 1
          Call .ListItems.Add(j, , arrData(0))

          For i = 1 To UBound(arrData)
            .ListItems(j).SubItems(i) = arrData(i)
          Next i

        Wend
      Close #intFree
  End With
End Sub
Avatar billede martin_moth Mester
24. november 2003 - 15:48 #20
Er det ikke principielt ikke præcis det samme jeg skrev 21/11-2003 12:41:35 ?
Avatar billede sjh Nybegynder
24. november 2003 - 15:50 #21
Jo det er det sq også :D
Avatar billede sjh Nybegynder
24. november 2003 - 15:52 #22
martin_moth < har du også problemer med Set Litem .....?
Avatar billede slapstick Nybegynder
24. november 2003 - 15:55 #23
ok så virkede det jeg siger rigtig mange tak !! :)
Avatar billede martin_moth Mester
24. november 2003 - 15:57 #24
Selv tak. Hrmpf...
Avatar billede slapstick Nybegynder
24. november 2003 - 16:04 #25
hrmpf?
Avatar billede martin_moth Mester
24. november 2003 - 16:13 #26
Jeg retter:
Hrmpf ;o)
Avatar billede slapstick Nybegynder
24. november 2003 - 16:17 #27
hehehehe ok :) jamen jeg takker sgu en gang til.. til jer begge to ! :)
Avatar billede martin_moth Mester
24. november 2003 - 16:24 #28
Jeg fandt aldrig ud af hvilken af de forskellige løsninger du fik til at virke?
Avatar billede slapstick Nybegynder
24. november 2003 - 16:28 #29
jeg prøvede din dengang du skrev den men fik det aldrig til at spille
så denne gang har jeg brugt den fa sjh
kan dog ikke lige se hvorfor det eksempel du skrev ikke sku virke
jeg har nok selv fået fucket det hehe
Avatar billede martin_moth Mester
24. november 2003 - 16:47 #30
men shj kom jo med to forskellige. Brugte du det sidste eller det første forslag? Bare nysgerrig...
Avatar billede slapstick Nybegynder
24. november 2003 - 16:55 #31
brugte det sidste der hvor så vidt jeg kan se den eneste forskel er at han bruger Call .ListItems.Add(j, , arrData(0))
istedet for Set .ListItems.Add(j, , arrData(0))
:)
Avatar billede martin_moth Mester
24. november 2003 - 17:01 #32
ok. Tak
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