21. marts 2002 - 08:14Der er
14 kommentarer og 1 løsning
Få text til at stå i kollonner
hej jeg er ved at lave et program med en database og når jeg trykker på en knap smider den alle data i tabellerne ned på en linie i en richtextbox men jeg ville gerne ha at navne stod lige over hinanden og adresser lige over hinanden ligesom et excel regneark
Bedre ville være med et listview så kan du selv definere dine kolonneoverskrifter, sortere kolonner mv. Det kræver lidt mere at sætte op men virker meget bedre.
Listview ligger i Microsoft Windows Common Controls 6.0
Her laves 3 kolonner.
Private Sub Command1_Click() Dim intNr As Integer intNr = 1 rs.MoveFirst While Not rs.EOF ListView1.ListItems.Add intNr, , rs.Fields(0) ' første kolonne ListView1.ListItems(intNr).SubItems(1) = rs.Fields(1) ' anden kolonne ListView1.ListItems(intNr).SubItems(2) = rs.Fields(2) ' tredje kolonne ' osv osv intNr = intNr + 1 rs.MoveNext Wend End Sub
Højreklik først på listview og sæt "view" til 3 - lvwReport, gå ind under fanebladet columnheaders og lav 3 columns. Her kan du også skrive kolonne overskrifter.
jeg takker mange gange for den gode hjælp jeg har dog et spørgsmål til hvordan printer jeg den listview ud og gemmer i text så jeg kan åbne den gemte liste for det var temmelig let i richtextbox
Den første rutine gemmer alle poster i en tekstfil kaldet listview.txt og den anden henter dem igen....
Private Sub Command2_Click() ' Gem alle poster i tekstfil Dim intFF As Integer Dim strFilNavn As String Dim intCount As Integer Dim intAntal As Integer Dim strTekst As String
With ListView1 Open strFilNavn For Output As #intFF For intCount = 1 To intAntal strTekst = .ListItems(intCount).Text strTekst = strTekst & "," & .ListItems(intCount).SubItems(1) strTekst = strTekst & "," & .ListItems(intCount).SubItems(2) Print #intFF, strTekst Next intCount Close #intFF End With End Sub
Private Sub Command3_Click() ' Hent poster fra tekstfil Dim intFF As Integer Dim strFilNavn As String Dim intCount As Integer Dim strTekst As String Dim arrTekst() As String
intFF = FreeFile strFilNavn = "C:\listview.txt"
' Sletter data i listview: ListView1.ListItems.Clear ' Listview har base 1: intCount = 1
With ListView1 Open strFilNavn For Input As #intFF Do While Not EOF(intFF) Line Input #intFF, strTekst arrTekst() = Split(strTekst, ",") .ListItems.Add intCount, , arrTekst(0) .ListItems(intCount).SubItems(1) = arrTekst(1) .ListItems(intCount).SubItems(2) = arrTekst(2) intCount = intCount + 1 Loop Close #1 End With End Sub
jeg mangler stadig en funktion der printer boxen i den ( pæne form ) det der tekst doc er ikke sat pænt op lige som boxen er.... jeg vil håbe du har lyst til at vise mig det jeg har sku lært noget af det her.. takker på forhånd og er det muligt at få overskrifterne med i udskriften
Håber du kan bruge det her. Du er selv nødt til at lege lidt med opsætningen.
Private Sub Command4_Click() ' Udskriv tekst fra listview Dim intLinieNr As Integer Dim intSideNr As Integer Dim intAntalLinier As Integer Dim intCounter As Integer Dim intKolonne As Integer Const intStarty As Integer = 20 Dim arrKol(2) As Integer ' Kolonnernes startposition i millimeter arrKol(0) = 20 arrKol(1) = 50 arrKol(2) = 100 ' Sæt printer til millimeter Printer.ScaleMode = vbMillimeters Printer.Scale (0, 0)-(210, 297) ' Starter på side 1 intSideNr = 1 ' Hvor mange linier skal der udskrives i alt intAntalLinier = ListView1.ListItems.Count intLinieNr = 1 For intCounter = 1 To intAntalLinier ' Er vi øverst på siden? If intLinieNr = 1 Then ' Så skriv kolonneoverskrifter med fed skrift Printer.Font.Bold = True For intKolonne = 0 To 2 Printer.CurrentY = intStarty - 5 Printer.CurrentX = arrKol(intKolonne) Printer.Print ListView1.ColumnHeaders(intKolonne + 1).Text Next intKolonne Printer.Font.Bold = False End If Printer.Line (20, intStarty)-(200, intStarty) ' Skriv 70 liniers tekst under kolonneoverskrifterne Printer.CurrentY = intStarty + (intLinieNr * 3) Printer.CurrentX = arrKol(0) Printer.Print ListView1.ListItems(intCounter).Text For intKolonne = 1 To 2 Printer.CurrentY = intStarty + (intLinieNr * 3) Printer.CurrentX = arrKol(intKolonne) Printer.Print ListView1.ListItems(intCounter).SubItems(intKolonne) Next intKolonne intLinieNr = intLinieNr + 1 ' Skifte til næste side? If intLinieNr = 71 Then intLinieNr = 1 Printer.CurrentY = 290 Printer.CurrentX = 105 Printer.Print "Side " & intSideNr intSideNr = intSideNr + 1 Printer.NewPage End If Next intCounter ' Hvis udskriften stopper midt på en side kommer ' sidenummer ikke med... If intLinieNr < 71 Then Printer.CurrentY = 290 Printer.CurrentX = 105 Printer.Print "Side " & intSideNr End If ' Husk enddoc ellers sker der ikke så meget... Printer.EndDoc End Sub
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.