---
title: "Skriva ut en listview & annat?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/80461-skriva-ut-en-listview-annat"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "medialabs"
published: "2003-06-24T16:25:19.000Z"
updated: "2003-07-06T15:23:39.000Z"
replies: 18
views: 498
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/80461-skriva-ut-en-listview-annat"
---

# Skriva ut en listview & annat?

## #1 — medialabs, 2003-06-24T16:25Z

hej!

Nån som kan ge mig en adress till nån vbsida eller har lite kod att dela med sig av. Där man ser hur man gör för att skriva ut en listview. 

Ska ha funktionen till mitt program system information :)

Permalänk: https://www.webforum.nu/p/80461

## #2 — krupp, 2003-06-24T21:00Z

Mitt enkla förslag är att du gör en html-sida av listview'n och ber Internet Explorer att skriva ut den.

/dr Krupp

Permalänk: https://www.webforum.nu/p/1092136

## #3 — Nexus86, 2003-07-06T11:33Z

Eller att du lägger en exakt likadan listview i ett dolt fönster och kör DoldForm.PrintForm när du ska skriva ut.

Permalänk: https://www.webforum.nu/p/1104629

## #4 — medialabs, 2003-07-06T12:39Z

> **Nexus86 skrev:**
>
> Eller att du lägger en exakt likadan listview i ett dolt fönster och kör DoldForm.PrintForm när du ska skriva ut.

Jag har löst det med att använda mig av detta:

```
''Dim liItem As ListItem.
    Dim min As Variant
    Dim Item As Variant
    Dim liItem As ListItem
    Dim liSubItem As ListSubItem
    Dim strOutPut As String
    Dim itm As Variant
    Dim itm2 As Variant
    
''Loopa ut all information till en variabel.
    For Each itm In ListView1.ListItems
        strOutPut = ""
        Set liItem = itm
        strOutPut = strOutPut & liItem.Text
        
    For Each itm2 In liItem.ListSubItems
        Set liSubItem = itm2
        strOutPut = strOutPut & " " & liSubItem.Text
    Next
    min = min & strOutPut & vbCrLf
    Next

'Börja utskriften nu...
    Printer.Print min
    Printer.EndDoc
```

Permalänk: https://www.webforum.nu/p/1104716

## #5 — Nexus86, 2003-07-06T13:58Z

Så kan man också göra men jag tänkte mer på om man hade ikoner och grejer som man ville ha med. :)

Om du har din ListView som en ReportList, vilket du förmodligen har, får jag föreslå en (egentligen två) funktioner som jag nyss skrev som skriver ut lite finare än vad din gör? (no offence)

```
Private Sub PrintListview(cListView As ListView)
  Dim liItm         As ListItem
  Dim liSubItm      As ListSubItem
  Dim coItm         As ColumnHeader
  Dim lColWidth()   As Long
  Dim lTotal        As Long
  Dim lLeft         As Long
  Dim lTop          As Long
  Dim i             As Long
  Dim sOutput       As String
  
    ' Kolla bredden på kolumnerna
    ReDim lColWidth(cListView.ColumnHeaders.Count) As Long
    For Each coItm In cListView.ColumnHeaders
        lColWidth(coItm.Index) = coItm.Width
        lTotal = lTotal + coItm.Width
    Next coItm
    
    ' Sätt skrivarens ScaleMode till twips
    Printer.ScaleMode = vbTwips
    
    ' Loopa igenom värden och rita ut dem på rätt plats
    For Each coItm In cListView.ColumnHeaders
        If Printer.TextWidth(coItm.Text) > coItm.Width Then
            sOutput = ShortenString(coItm.Text, coItm.Width - 50)
        Else
            sOutput = coItm.Text
        End If
        
        lLeft = 0
        For i = 1 To coItm.Index - 1
            lLeft = lLeft + lColWidth(i)
        Next i
        
        Printer.CurrentX = lLeft
        Printer.CurrentY = 0
        Printer.Print sOutput
    Next coItm
    
    Printer.Print String(200, Chr$(175))
    
    For Each liItm In cListView.ListItems
        If Printer.TextWidth(liItm.Text) > lColWidth(1) Then
            sOutput = ShortenString(liItm.Text, lColWidth(1) - 50)
        Else
            sOutput = liItm.Text
        End If
        lTop = Printer.CurrentY
        Printer.Print sOutput
        
        For Each liSubItm In liItm.ListSubItems
            If Printer.TextWidth(liSubItm.Text) > lColWidth(liSubItm.Index + 1) Then
                sOutput = ShortenString(liSubItm.Text, lColWidth(liSubItm.Index + 1) - 50)
            Else
                sOutput = liSubItm.Text
            End If
            
            lLeft = 0
            For i = 1 To liSubItm.Index
                lLeft = lLeft + lColWidth(i)
            Next i
            
            Printer.CurrentX = lLeft
            Printer.CurrentY = lTop
            
            Printer.Print sOutput
        Next liSubItm
    Next liItm
    
    Printer.EndDoc
End Sub

Private Function ShortenString(sText As String, lGoalWidth As Long) As String
  Dim Text As String
    Text = sText & "..."
    
    Do Until Printer.TextWidth(Text) < lGoalWidth
        Text = Mid$(Text, 1, Len(Text) - 4) & "..."
    Loop
    ShortenString = Text
End Function
```

För att skriva ut ListView1, skriv bara 

```
PrintListView(ListView1)
```

Permalänk: https://www.webforum.nu/p/1104765

## #6 — medialabs, 2003-07-06T14:09Z

Den klagar över 

PrintListView(ListView1)

Run-time error '438':

Object doesn´t support this property or method

Permalänk: https://www.webforum.nu/p/1104774

## #7 — Nexus86, 2003-07-06T14:11Z

Va? Inte för mig, på vilken rad?

Permalänk: https://www.webforum.nu/p/1104776

## #8 — medialabs, 2003-07-06T14:13Z

När jag anropar skriva ut från en command knapp:

  PrintListview (ListView1)

Permalänk: https://www.webforum.nu/p/1104779

## #9 — Nexus86, 2003-07-06T14:21Z

Ja men jag menar vilken rad i min funktion. Vilken rad blir gul när du klickar på Debug? :)

Permalänk: https://www.webforum.nu/p/1104783

## #10 — medialabs, 2003-07-06T14:23Z

> **Nexus86 skrev:**
>
> Ja men jag menar vilken rad i min funktion. Vilken rad blir gul när du klickar på Debug? :)

PrintListview (ListView1)  :e

Permalänk: https://www.webforum.nu/p/1104784

## #11 — Nexus86, 2003-07-06T14:24Z

Ok. Hur ser din ListView ut? Har du några ColumnHeaders? Är den verkligen en Report? Har du några ListSubItems?

Permalänk: https://www.webforum.nu/p/1104786

## #12 — medialabs, 2003-07-06T14:27Z

> **Nexus86 skrev:**
>
> Ok. Hur ser din ListView ut? Har du några ColumnHeaders? Är den verkligen en Report? Har du några ListSubItems?

hmm, jag är i alla fall säker på att jag har ListSubItems, 

Det var där jag testade att lägga in din skriv ut funktion....

Permalänk: https://www.webforum.nu/p/1104790

## #13 — Nexus86, 2003-07-06T14:31Z

Du hade ColumnHeaders ser jag och det är verkligen en Report. Frågan är bara varför det inte fungerar. :l

Har du något emot att låna ut din kod för studering?

Permalänk: https://www.webforum.nu/p/1104796

## #14 — medialabs, 2003-07-06T14:51Z

> **Nexus86 skrev:**
>
> Du hade ColumnHeaders ser jag och det är verkligen en Report. Frågan är bara varför det inte fungerar. :l
> 
> Har du något emot att låna ut din kod för studering?

Du har fått ett PM nu....  :)

Permalänk: https://www.webforum.nu/p/1104812

## #15 — Nexus86, 2003-07-06T14:54Z

Såg det. Ta bort parenteserna runt ListView1 så fungerar det. :)

```
PrintListview ListView1
```

Permalänk: https://www.webforum.nu/p/1104819

## #16 — medialabs, 2003-07-06T15:03Z

> **Nexus86 skrev:**
>
> Såg det. Ta bort parenteserna runt ListView1 så fungerar det. :)
> 
>
>
> ```
> PrintListview ListView1
> ```

Ska testa om en liten stund.  :)

Permalänk: https://www.webforum.nu/p/1104829

## #17 — Nexus86, 2003-07-06T15:08Z

Ok. Gör det. Vill själv veta hur bra funktionen funkar. :)

Permalänk: https://www.webforum.nu/p/1104835

## #18 — medialabs, 2003-07-06T15:21Z

> **Nexus86 skrev:**
>
> Ok. Gör det. Vill själv veta hur bra funktionen funkar. :)

Det var som självaste fan, Blev ju hur snygga utskrifter som helst. Jag tackar och bockar dig Nexus86 o store Vb gud...  :e

Permalänk: https://www.webforum.nu/p/1104842

## #19 — Nexus86, 2003-07-06T15:23Z

' :e Man tackar!

Permalänk: https://www.webforum.nu/p/1104843

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/80461-skriva-ut-en-listview-annat
