Bin ich zu blöd zum Drucken?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Bin ich zu blöd zum Drucken?

    Hallo Gemeinde,

    drucken scheint für mich ein Buch mit 7 Siegeln zu sein.
    Ich
    versuche die Seitengröße zu definieren und die Ausrichtung anzupassen.
    Weder dies noch die Auswahl des Druckers wird berücksichtigt, der Druck
    wird sogar durchgeführt wenn im Druckfenster auf abbrechen geklickt
    wird.

    Irgendwie mache ich dabei einen grundsätzlichen Denkfehler. Wer kann mich auf den richtigen Weg bringen?

    Der von mir verwendete Code:

    VB.NET-Quellcode

    1. Imports System.Drawing.Printing
    2. Module Drucken
    3. Private m_pd As New Printing.PrintDocument()
    4. Private m_intCurrentPage As Integer
    5. Private Sub m_pd_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    6. Dim pkCustomSize1 As New PaperSize("Custom Paper Size", 2540, 2540)
    7. e.Graphics.DrawString(prj_name, New Font("Arial", 18), New
    8. SolidBrush(Color.Black), e.MarginBounds.Left, e.MarginBounds.Top)
    9. For Each textbox As Control In ProjectPlan.TimePanel.Controls
    10. e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds.Left +
    11. textbox.Left + 100, e.MarginBounds.Top + 100 + textbox.Top,
    12. textbox.Width, textbox.Height)
    13. e.Graphics.DrawString(textbox.Text, New Font("Arial", 9), New
    14. SolidBrush(Color.Black), e.MarginBounds.Left + textbox.Left + 100,
    15. e.MarginBounds.Top + 100 + textbox.Top)
    16. Next
    17. End Sub
    18. Public Sub druck_aufrufen()
    19. m_pd.DocumentName = "Druck_von" & prj_name
    20. AddHandler m_pd.PrintPage, AddressOf m_pd_PrintPage
    21. m_intCurrentPage = 0
    22. m_pd.Print()
    23. End Sub
    24. Private Sub m_pd_PageSettings(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    25. e.PageSettings.Landscape = True
    26. e.PageSettings.PaperSize.PaperName = "A2"
    27. End Sub
    28. End Module
    Wozu ein Molule? Ein solches hat in VB.NET nur für Befehlserweiterungen eine Daseinsberechtigung.
    Fang mal klein an.
    Mach eine WinForm und zieh Dir da ein PrintDocument und einen PrintPreviewDialog rein.
    Weise im Designer dem PrintPreviewDialog das PrintDocument als Document zu und generiere eine PrintPage-Prozedur.
    Zieh noch einen Button rein und gib dem eine Button-Click-Prozedur.
    Von nun an kannste Code schreiben.
    Im Button-Click rufste den PrintPreviewDialog auf und in der PrintPage-Prozedur schreibst Du einfach "Bla" in e.Graphics.
    Wenn das alles klappt, sehen wir weiter.
    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!

    Bei neuem Projekt klappt es, bei bestehendem nicht

    Hallo RodFromGermany,

    ich habe ein neues Projekt erstellt und PrintDokument und PrintPreviewDialog entsprechend angelgt. Klappt super, akzeptiert den ausgewählten Drucker (PDF) und verwendet diesen
    In dem bestehenden Dokument wird das auswählen des Druckers komplett ignoriert. Auch wenn PDF ausgewählt wird, es wird immer auf den Standarddrucker gedruckt.
    Dazu muss ich sagen, bei dem Form, handelt es sich nicht um das eigentliche Haupt-Formular, sondrn, um ein vom Hauptformular neu geöffnetes.

    Irgend eine Idee wie das Problem zu handeln ist oder kann ich von einem "Zweitformalar gar nicht vernünftig drucken?

    Danke

    miamiomc schrieb:

    wie das Problem zu handeln ist
    Was meinst Du jetzt mit Das Problem?
    Wie rufst Du das Zweitformular auf?
    Wie rufst Du denn den Druck vom Zweitformular auf?
    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!
    Mit "das Problem" meine ich, das ich in PrinterDialog zwar einen anderen Drucker auswählen kann, der Druck allerdings auf dem Standarddrucker erfolgt.

    Das Zweitformular "ProjectPlan" rufe ich aus Mainform mit

    VB.NET-Quellcode

    1. ProjectPlan.Show()

    auf.
    der Aufruf des Drucks:

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. e.Graphics.DrawString(prj_name, New Font("Arial", 18), New SolidBrush(Color.Black), e.MarginBounds.Left, e.MarginBounds.Top)
    3. End Sub
    4. Private Sub EinzelnToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles EinzelnToolStripMenuItem.Click
    5. If PrintDialog1.ShowDialog() = DialogResult.OK Then
    6. PrintDocument1.Print()
    7. End If
    8. End Sub

    miamiomc schrieb:

    VB.NET-Quellcode

    1. ProjectPlan.Show()
    Da haste offensichtlich keine mit New erstellte Instanz Deiner Form verwendet (suche nach modalen und nicht modalen Dialogen).
    Hast Du dem PrintDialog das PrintDocument als Document zugeordnet (geht im Designer)?

    Kleiner Tipp:
    Mach zunächst alles aus der Hauptform heraus.
    Wenn dann der Druck funktioniert, machen wir den nächsten Schritt.
    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!