PrintDialog1

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Dizzy.

    Guten Mittag an alle,

    nun schlage ich mich seit gestern mit folgendem Problem rum. Habe einen PrintDialog1, klappt auch soweit, dennoch, wenn ich im Dialog angebe er soll zwei oder drei Seiten drucken, so druckt er nur eine.
    Das liegt mit Sicherheit an dem folgenden Code:

    Private Sub btn_drucken_Click(sender As Object, e As EventArgs) Handles btn_drucken.Click
    If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    PrintForm1.Print()
    End If
    End Sub


    Er nimmt sich dann PrintForm1.Print() und druckt nur eine Seite, obwohl, wie gesagt, ich im Dialog 3 Seiten angegeben habe.
    Google ist sicher mein Freund, aber dort habe ich auch nichts zur Hilfestellung gefunden.

    In der Dialogbox unter Eigenschaften habe ich den Reiter Document, rechts daneben kann ich aber kein Document auswählen, vielleicht liegt da ja der Fehler

    Estmal liebe Grüße aus Wentorf.

    Friedhelm

    Viddi schrieb:

    VB.NET-Quellcode

    1. PrintForm1.Print()
    Diede Zeile hat da nix zu suchen.
    Gugst Du hier.
    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!
    Public Class Form1

    Dim PrintDocument1 As Printing.PrintDocument

    Private Sub btn_drucken_Click(sender As Object, e As EventArgs) Handles btn_drucken.Click
    ' Drucker und Anzahl der Kopien festlegen
    Using dlg As New PrintDialog
    dlg.Document = Me.PrintDocument1
    dlg.ShowDialog()
    End Using
    End Sub


    Die Box öffnet sich, nur wo sage ich dem PrintDialog, das er die gesamte Form drucken soll. Mit dem Code oben passiert gar nichts,
    als wenn ich den Stecker aus dem Drucker gezogen hätte.

    Grüße
    Friedhelm.P:S RodFromGermany - hatte alles genau durch gelesen - kann man mir eigentlich noch helfen :)

    Viddi schrieb:

    dem PrintDialog
    nicht, aber dem PrintDocument im Event PrintPage.
    Arbeite mal das Tut durch, damit DSu ein Gefühl für das Drucken bekommst.
    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!
    im Event printpage hbe ich nun auch alles versucht und mir den Tut paar Mal durchgelesen, entweder bin ich fertig und sehe etwas nicht, oder ich bin total blind.

    Ich muss doch irgendwo die Form hinterlegen können und diese ausdrucken. Kann doch nicht angehen.

    Public Class Form1

    Dim Form1 As Printing.PrintDocument

    Private Sub btn_drucken_Click(sender As Object, e As EventArgs) Handles btn_drucken.Click
    Dim Form1 As Printing.PrintDocument
    ' Drucker und Anzahl der Kopien festlegen
    Using dlg As New PrintDialog
    dlg.Document = Me.Form1
    dlg.ShowDialog()
    End Using
    End Sub


    Hab auf Quittungsblock geändert, auf Form1 - nix geht
    Das

    Viddi schrieb:

    PrintDocument
    ziehst Du im Designer auf die Form.
    Den Rest erarbeitest Du Dir hier.
    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!
    Ne sorry, ich komme nicht weiter...
    Kannst Du mir bitte helfen

    Für Hilfe wäre ich dankbar - man kann auch aus codes, die einem gegebn werden lernen, ohne dass man Stunden vor dem Compi sitzt. Bitte

    Hab nun alles hin und her getestet, nix funzt.

    LG
    Friedhelm

    Viddi schrieb:

    Kannst Du mir bitte helfen
    Dann beschfreibe das Problem noch mal aus Deiner jetzigen Sicht.
    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 denke du hast dich da total verlaufen. Du versuchst noch immer krampfhaft die Form zu drucken. Das macht man aber nicht!
    Gedruckt wird das PrintDocument, dem du sagst was wo wie gedruckt werden soll.

    geh noch mal Schrit für Schrit das Tut von RodFromGermany durch. da ist alles beschrieben wast brauchst. am besten machst dir ein neues Projekt und experimentier ein bischen herum wie das mit dem Drucken so geht.
    übrigens wenn du das machst schläst du gleich 2 Fliegen mit einer Klappe, du hast auch gleich einen kleinen Einstig in GDI++, denn in eine Picturbox zu malen geht im prinzip gleich.
    Jaja, total verlaufen. Das habe ich auch ...
    Es muss die Form gedruckt werden, da es ja eine sogenannte Quittung ist. Im Übrigen teste ich schon den ganzen Tut.

    Hier mal der bisherige Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Property Document1 As Printing.PrintDocument
    3. Private Sub btn_drucken_Click(sender As Object, e As EventArgs) Handles btn_drucken.Click
    4. ' Drucker und Anzahl der Kopien festlegen
    5. Using dlg As New PrintDialog
    6. dlg.Document = Document1
    7. dlg.ShowDialog()
    8. End Using
    9. End Sub


    nun das Bildchen:



    nach dem o.a. Code öffnet sich auch wunderbar die DialogBox, doch wenn ich 2 Exemplare eingebe, druckt er nix.

    Noch ein Bild der gesamten Boxen, vielleicht beisst sich da was.



    Was kan es denn da für eine Lösung geben. Ich könnte ja den folgenden Code 2 x eingeben:

    PrintForm1.Print()

    dann druckt er 2 x.

    Was kann ich denn noch machen?

    Liebe Grüße aus Hamburg

    Viddi schrieb:

    Was kann ich denn noch machen?
    Gib bei Anzahl Exemplare eine 2 ein.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Using dlg = New PrintDialog
    4. dlg.Document = Me.PrintDocument1
    5. If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    6. Return
    7. End If
    8. End Using
    9. Using dlg As New PrintPreviewDialog
    10. dlg.Document = Me.PrintDocument1
    11. If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    12. Return
    13. End If
    14. End Using
    15. End Sub
    16. Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    17. Using bmp As New Bitmap(Me.Width, Me.Height)
    18. Dim gr As Graphics = Graphics.FromImage(bmp)
    19. Dim pt = Me.Location
    20. gr.CopyFromScreen(pt, New Point, Me.Size)
    21. e.Graphics.DrawImageUnscaled(bmp, New Point(100, 100))
    22. End Using
    23. End Sub
    24. End Class
    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!
    @RodFromGermany
    Ok so kann man die Form Drucken. Aber ich denke nicht dass, das die beste lösung ist.

    @Viddi
    Da ist ja die Form 1:1 Gedruckt. Sollen die Buttons auch mit rauf auf die Quittung?
    Meine Meinug ist wenn schon Drucken dann ordentlich.
    was spricht dagegen wenn du die Quittung im PrintDocument so Zeichnest wie du sie haben willst. ist sicher eine mänge arbeit für dich aber glaube mir es lohnt sich.
    wie ich oben schon geschrieben habe lernst du da eine menge.
    ausserdem kannst du auch auf den PrintDialog verzichten. Bei einer Quittung stört der sowiso nur, da sollen eben mal schnell zwei zettel rauskommen und feddich.
    Ausserdem bist du dann flexiebel, deine Eingamemaske muss nicht gleich ausschauen wie die Qittung.
    @Rod, erstmal ganz lieben Dank für den Code und Deine Zeit. Danke
    Funtioniert das ganze auch ohne Seitenansicht, ohne das diese als PopUp aufgeht. Also direkt aus dem Dialog drucken kann?

    @Dizzy, klar, die ganze Form zu drucken ist eben nicht so das Optimalste. Und die Buttons sollten auch nicht gedruckt werden. Ich bin einfach davon ausgegangen, das es mit einem PrintDialog
    professioneller aussieht, so können wir eingeben, ob wir zwei Audrucke benötigen oder nur einen. Nur, er sollte direkt aus dem Dialog drucken.

    Ich werde mich mal ernsthaft mit dem Tut befassen und dann ggf alles zeichnen, aber eigentlich reicht es so, wenn man direkt aus dem Dialog drucken könnte...egal auf die Buttons - erstmal.
    Bin ja schon froh das so einigermaßen hin bekommen zu haben.

    Liebe Grüße aus Wentorf

    Friedhelm

    Viddi schrieb:

    Also direkt aus dem Dialog drucken kann?
    So, das ist noch viel optimaler als das optimalste :thumbsup: :

    VB.NET-Quellcode

    1. Me.PrintDocument1.Print()
    2. 'Using dlg As New PrintPreviewDialog
    3. ' dlg.Document = Me.PrintDocument1
    4. ' If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    5. ' Return
    6. ' End If
    7. 'End Using

    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!
    :thumbsup: Leider net... :S

    wenn ich diesen Code nehme, druckt er ein leeres Blatt, da nicht angegeben ist was er drucken soll.
    Weiter geht die Seiteansicht nach wie vor auf.

    Also muss ich folgenden Code drinne lassen:

    VB.NET-Quellcode

    1. Private Sub btn_drucken_Click(sender As Object, e As EventArgs) Handles btn_drucken.Click
    2. Me.PrintDocument1.Print()
    3. Using dlg As New PrintPreviewDialog
    4. dlg.Document = Me.PrintDocument1
    5. If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then
    6. Return
    7. End If
    8. End Using
    9. End Sub
    10. Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    11. Using bmp As New Bitmap(Me.Width, Me.Height)
    12. Dim gr As Graphics = Graphics.FromImage(bmp)
    13. Dim pt = Me.Location
    14. gr.CopyFromScreen(pt, New Point, Me.Size)
    15. e.Graphics.DrawImageUnscaled(bmp, New Point(100, 100))
    16. End Using
    17. End Sub


    Ich meine, meine Mutter ist gerade ins Krankenhaus gebracht worden, bin vielleicht einwenig durcheinander....

    Jaja, so ist das mit den älteren Herren...
    @Viddi
    ich möchte jetzt nicht pingelig sein aber mir ist da bei deiner Quittung so einiges aufgefallen.
    Da ich selbst schon einige Kassenprogramme gemacht habe und gerade wieder an einem arbeite. Allerdings bin ich aus Österreich und weiß nicht ob ihr das in Dautschland auch braucht.
    Sollte keine Kritik sein aber du solltest nachdenken wenn du es Einsetzen willst.

    1. Es Fehlt die Adresse
    2. Es Fehlt die UID-Nr.
    3. Es Fehlt die MwSt
    4. Es Fehlt der Steuersatz
    Bei uns in Österreich muss das alles auf einer Quttung oben sein. Ab 2016 sogar wenn du nur einen Lutscher um 0,10€ verkaufst.

    VB.NET-Quellcode

    1. Using dlg As New PrintDialog
    2. dlg.Document = Me.PrintDocument1
    3. dlg.AllowSomePages = False
    4. dlg.AllowSelection = False
    5. 'dlg.PrinterSettings.PrinterName = My.Settings.Drucker1
    6. End Using
    7. Me.PrintDocument1.Print()

    PrinterSettings.PrinterName habe ich ausdokumentiert, aber damit kannst du festlegen auf welchen drucker gedruckt werden soll. wird nix angegeben wird der Standarddrucker verwendet.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Dizzy“ ()

    Hallo Dizzy,

    MwST kannste knicken, da wir in der Pflegebranche sind, wir sind "noch" von der Umsatzsteuer befreit.
    Also auch keine UID Nr.
    Hier in Deutschland gilt dieses für gewerbliche Unternehmen genauso wie bei euch in den Bergen.

    Dieser Block ist nur für uns, wenn wir z.B Taschengeld entgegennehmen, aus diesem Grunde auch die Comboboxen, weiter dann eben an unsere Buchhalterin, ob diese Quittung schon eingetragen ist u.s.w.

    Der nächste Schritt solllte sein, das die Quittung sich selber in ein Kassenbuch einträgt, ich dachte da an eine umgebaute Ecxel Datei - aber ein Schritt nach dem anderen.
    P.S.: Ich finde es gut, wenn jemand pingelig ist, einwenig Perfektionismus an den Tag legt. Falls noch Fragen - dann einfach fragen...

    Danke aber für Deine Hilfe und Antworten.

    Grüße aus dem Altenheim, der Wohngruppe und der Tagespflege in Wentorf bei Hamburgo.

    Friedhelm
    ah ok; bin da halt recht genau, da bei uns in Österreich der Herr Finanzminister selber nicht mehr weiß was er will. (mal so mal so und dann wieder was neues)
    schö zu lesen das du weitermachst.

    das mit Ecxel würde ich mal überdenken. und schau dir mal die Tuts von @ErfinderDesRades über Datenmodelle und Datenbaken ohne Db an. glaube mir, guck seine Videos, lies was er dazu schreibt. du wirst das sicher nicht von heute auf morgen erlernen, aber hier wird dir sicher geholfen.
    in sachen datenbanken bin ich auch recht fit aber der spezialist hier im Forum ist eindeutig @ErfinderDesRades der kann das auch sehr gut erklären.

    noch was:
    probiere das mal einfügen.
    dlg.PrinterSettings.Copies = 2

    Edit:
    hir noch ein Link von ErfinderDesRades: die vier Views auf Video

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dizzy“ ()