Mehrere Seiten drucken - HILFE

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mehrere Seiten drucken - HILFE

    Hallo !

    Ich hab vor kurzem mal ein Thema diesbezüglich eröffnen, jedoch hat mir das nur zum teil weitergeholfen.
    Nun bin ich an einem etwas größerem Projekt dran, ich erstelle für einen Verein eine Mitgliedsdatenbank - der Verein hat ca. 800 Mitglieder.

    Die Funktion, alle mitglieder zu drucken sollte natürlich auch gegeben sein (jeweils 1 zeile / mitglieder).

    Gibts es eine Libary, die mich dabei unterstützt einen einfachen seitenumbruch hin zu bekommen ?
    Wenn nicht, dann bitte schreibt mir einen Code, der sehr einfach an zu wenden ist für ein Printdocument.

    MfG
    Vergiss den Verein, vergiss die Datenbank und widme Dich dem Problem.
    Du hast ein PrintPage-Ereignis, das wird für jede zu druckende Seite aufgerufen.
    Du musst jede Seite befüllen und weißt, wieviele Zeilen auf die Seite passen.
    Wenn nach einer Seite noch zu druckende Zeilen übrig sind, setzt Du e.HasMorePages auf True.
    Daeraufhin wird das PrintPage-Ereignis erneut aufgerufen.
    Da musst Du wissen, dass Du wieder oben anfängst, welche Seite Du druckst und welche Zeilen Du nun zu drucken hast.
    Feddich.
    Sieh Dir Deine Threads an, da steht alles drin, was Du brauchst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ICH CHECKS NICHT....

    Ich hab 2 Variablen (GesamtZeilen & Index) "Index = Zeile in der ich mich befinde"
    Ich lass vom button, der das print-event auslöst die anzahl der zu druckenden zeilen erfassen.

    Anschließend im PrintPage ereignis mach ich eine for-schleife diese for-schleife zählt den INdex immer "-1" - in dieser Forschleife ist eine IF-Schleife, die Prüft ob das Ergebnis von Index / 4 eine Ganzzahl ist, wenn dies der Fall ist, DANN
    wird e.hasmorepages = true aufgerufen.

    Das heißt - immer wenn er 4 Zeilen gedruckt hat, soll er eine neue seite drucken.
    Aber ich bekomms ned hin... von der Überlegung her sollte es doch klappen oder ?

    windowsfan schrieb:

    Ich hab 2 Variablen
    Die eine Variable, die die laufende Zeile auf der aktuellen Seite enthält, musst Du in der PrintPage-Prozedur initialisieren und mit jeder gedruckten Zeile erhöhen. Sie steuert die Anzahl der Seiten und die Lage jedes Items auf der Seite.
    Die andere Variable, die das laufende zu druckende Element in einer Liste indiziert, liegt in der Klasse und wird mit dem Aufruf der globalen Print-Prozedur initialisiert und mit jeder gedruckten Zeile erhöht. Sie überwacht die Vollständigkeit des Ausdrucks.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo @RodFromGermany,

    danke wiedermal für eine Antowrt, meinst du es so ?


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Gesamt as Integer
    3. Private Index as Integer
    4. sub printdocument.print
    5. index+=1
    6. for i as integer = index to gesamt
    7. index+=1
    8. if x / x = ganzzahl
    9. e.hasmorepages = true
    10. end if
    11. e.graphics.drawstring(index, ....)
    12. next
    13. end sub
    14. '___________________________________________________
    15. sub Button Event
    16. INdex = -1
    17. Gesamt = 20
    18. end sub
    19. End Class

    windowsfan schrieb:

    meinst du es so ?
    Nö.
    Die eine, die die Zeilen auf einer Seite zählt, muss in die Sub printdocument.print.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn ich die Variable in die PrintPage prozedur stecke, dann wird die doch immer auf den Fixen Wert resettet, da ja das Event neu aufgerufen wird oder ?
    Bitte stell mal den Code richtig

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private GesamtZeilen As Integer
    3. Private ZeileInDerIchMichBefinde As Integer
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. GesamtZeilen = 20
    6. ZeileInDerIchMichBefinde = 0
    7. End Sub
    8. Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    9. Dim h As Integer = 20
    10. For i As Integer = ZeileInDerIchMichBefinde To GesamtZeilen
    11. ZeileInDerIchMichBefinde += 1
    12. h += 20
    13. If Int(ZeileInDerIchMichBefinde / 4) = ZeileInDerIchMichBefinde / 4 Then
    14. e.HasMorePages = True
    15. End If
    16. e.Graphics.DrawString(ZeileInDerIchMichBefinde, New Font("Arial", 8), Brushes.Black, 20, h)
    17. Next
    18. End Sub
    19. End Class
    PrintDocument, PrintPreviewDialog
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private GesamtZeilen As Integer
    2. Private ZeilenProSeite As Integer
    3. Private AktuelleZeile As Integer
    4. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    5. GesamtZeilen = 20
    6. ZeilenProSeite = 15
    7. AktuelleZeile = 0
    8. Me.PrintPreviewDialog1.ShowDialog()
    9. End Sub
    10. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    11. Dim g = e.Graphics
    12. For i = 1 To ZeilenProSeite
    13. AktuelleZeile += 1
    14. If (AktuelleZeile > GesamtZeilen) Then
    15. e.HasMorePages = False
    16. Return
    17. End If
    18. g.DrawString(AktuelleZeile.ToString, New Font("Arial", 20), Brushes.Black, New PointF(30, i * 30))
    19. Next
    20. e.HasMorePages = AktuelleZeile < GesamtZeilen
    21. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    JAWOLL danke RodFromGermany !!

    Aber zur verständnis...

    Was bewirken folgende Codezeilen?

    VB.NET-Quellcode

    1. If (AktuelleZeile > GesamtZeilen) Then
    2. e.HasMorePages = False
    3. Return
    4. End If
    5. e.HasMorePages = AktuelleZeile < GesamtZeilen



    e.HasMorePages wird auf True gesetzt, wenn AKtuelleZeile kleiner als GesamtZeilen ist oder?

    VB.NET-Quellcode

    1. e.HasMorePages = AktuelleZeile < GesamtZeilen



    und was bedeutet dies?

    VB.NET-Quellcode

    1. e.HasMorePages = False
    2. Return
    3. End If
    1. Wenn wir mitten auf der Seite fertig sind, hören wir auf.
    2. Wenn wir nach der Seite noch was zu tun haben, machen wir mit der nächsten Seite weiter.
    3. Fertig und raus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!