Brauche hilfe beim Drucken

  • VB.NET

Es gibt 77 Antworten in diesem Thema. Der letzte Beitrag () ist von Enrico.

    Brauche hilfe beim Drucken

    Hallo
    Ich bin neu im forum und beschäftige mich seit 2 wochen mit visual basic 2010 express und habe mein erstes mini programm geschrieben einen mwst rechner.

    Jetzt bin ich dabei ein programm zu erstellen womit man rechnungen schreiben kann.
    Kurz zum layout: es ist bloß ein fenster mit mehreren textboxen und label.
    Wenn ich später zuhause bin werde ich ein screenshot machen damit man es leichter versteht. Jetzt zu meinem problem: ich möchte es so drucken können das nur der text aus den textboxen und den labels zusehen ist ohne irgentwelchen rändern.

    Falls fragen bestehen einfach fragen.

    Danke schonmal im vorraus

    Mfg enrico
    Hier ein ganz einfaches Beispiel, wie man einen einfachen Text drucken kann:
    csharp-tricks.blogspot.de/2012/01/drucken-mit-c.html

    Auf MSDN findest du auch einige Infos:
    msdn.microsoft.com/de-de/library/vstudio/xdt36c58.aspx
    Da gibt's ein Control: PrintDocument. Da kann man mit GDI+ reinzeichnen. Das Drucken übernimmt das Control. Hier z.B. ein MSDN Quickie: msdn.microsoft.com/de-de/library/bb979343.aspx
    Mit freundlichen Grüßen,
    Thunderbolt
    Hallo

    da bin ich wieder. ich hab jetzt einiges ausprobiert und wollte jetzt mal fragen ob eventuell mal einer so nett sein könnte und den Code überprüfen könnte. ich habe leider keinen Drucker hier um es zu testen. wenn was falsch ist nicht so hart sein ich bin Neuling :)

    Danke schon mal im voraus

    Quellcode

    1. Imports System.Drawing.Printing
    2. Imports System.IO
    3. Public Class txtAdresse
    4. Public Property docToPrint As PrintDocument
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. 'Dropdown menü auswahl
    7. cmbÜberBar.Items.Add("Überweisung")
    8. cmbÜberBar.Items.Add("Barzahlung")
    9. 'Aktuelles Datum
    10. lblDatum.Text = Date.Today
    11. 'Tastenerkennung
    12. Me.KeyPreview = True
    13. End Sub
    14. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    15. Const mehrwertsteuer As Integer = 19
    16. Const hundert As Integer = 100
    17. Dim ergebniss As Double
    18. Dim zahl_anfang As Double
    19. Dim zahl_ende As Double
    20. If e.KeyCode = Keys.PageUp Then
    21. zahl_anfang = txtNetto.Text
    22. ergebniss = zahl_anfang / hundert * mehrwertsteuer + zahl_anfang
    23. txtBrutto.Text = ergebniss
    24. zahl_anfang = txtNetto.Text
    25. zahl_ende = txtBrutto.Text
    26. ergebniss = zahl_ende - zahl_anfang
    27. txtMwst.Text = ergebniss
    28. ElseIf e.KeyCode = Keys.PageDown Then
    29. zahl_ende = txtBrutto.Text
    30. ergebniss = zahl_ende / 1.19
    31. txtNetto.Text = ergebniss
    32. zahl_anfang = txtNetto.Text
    33. zahl_ende = txtBrutto.Text
    34. ergebniss = zahl_ende - zahl_anfang
    35. txtMwst.Text = ergebniss
    36. ElseIf e.KeyCode = Keys.F12 Then
    37. MsgBox(" Kleine Hilfe. " + vbNewLine + "1. `Öffnen´ klicken und `Rechnung.txt´öffnen" + vbNewLine + "2. Rechnung ganz normal schreiben." + vbNewLine + "3. `Rechnung´ oder `Barzahlung´ wählen." + vbNewLine + "4. Rechnung ganz normal Drucken." + vbNewLine + "5. !!!WICHTIG!!! VOR DEM BEENDEN SPEICHERN!!!")
    38. ElseIf e.KeyCode = Keys.F11 Then
    39. MsgBox("Tastenkürzel" + vbNewLine + "F12 = Hilfe aufrufen." + vbNewLine + "F11 = Tastenkürzel." + vbNewLine + "`Bild Up´ Errechnet den Brutto Preis und MwSt." + vbNewLine + "`Bild Down´ Errechnet den Netto Preis und MwSt." + vbNewLine + "`Druck´ Startet das Drucken" + vbNewLine + "`ALT´+`F4´ Programm Beenden." + vbNewLine + "`F4´ Öffnen" + vbNewLine + "`F3´ Speichern")
    40. ElseIf e.KeyCode = Keys.F4 Then
    41. 'Zum Öffnen der Rechnungsnummer
    42. Dim FileReader As StreamReader
    43. Dim results As DialogResult
    44. results = OpenFileDialog1.ShowDialog
    45. results = DialogResult.OK
    46. FileReader = New StreamReader(OpenFileDialog1.FileName)
    47. txtRNR.Text = FileReader.ReadToEnd()
    48. FileReader.Close()
    49. ElseIf e.KeyCode = Keys.F3 Then
    50. 'Zum Speichern der Rechnungsnummer
    51. Dim FileWriter As StreamWriter
    52. Dim results As DialogResult
    53. results = SaveFileDialog1.ShowDialog
    54. results = DialogResult.OK
    55. FileWriter = New StreamWriter(SaveFileDialog1.FileName, False)
    56. FileWriter.Write(txtRNR.Text)
    57. FileWriter.Close()
    58. ElseIf e.KeyCode = Keys.Alt + Keys.F4 Then
    59. Me.Close()
    60. ElseIf e.KeyCode = Keys.Print Then
    61. 'Zum Drucken
    62. Dim Form1 As New PrintDocument
    63. 'Let the user to choose the page range to print.
    64. PrintDialog1.AllowSomePages = True
    65. 'Display the help button.
    66. PrintDialog1.ShowHelp = True
    67. PrintDialog1.Document = Form1
    68. Dim result As DialogResult = PrintDialog1.ShowDialog()
    69. If (result = DialogResult.OK) Then
    70. Form1.Print()
    71. End If
    72. End If
    73. End Sub
    74. Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click
    75. 'Zum Beenden des Programms
    76. Dim testMsg As Integer
    77. MsgBox("Vor dem Beenden Speichern?", vbOKCancel + vbQuestion, "Test Message")
    78. 'Zum Speichern der Rechnungsnummer
    79. Dim FileWriter As StreamWriter
    80. Dim results As DialogResult
    81. results = SaveFileDialog1.ShowDialog
    82. If testMsg = 1 Then
    83. results = DialogResult.OK
    84. FileWriter = New StreamWriter(SaveFileDialog1.FileName, False)
    85. FileWriter.Write(txtRNR.Text)
    86. FileWriter.Close()
    87. Else
    88. Return
    89. End If
    90. End Sub
    91. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    92. Dim mytext As String
    93. mytext = Me.Text
    94. Dim printFont As New System.Drawing.Font _
    95. ("Arial", System.Drawing.FontStyle.Regular)
    96. ' Format and print the text
    97. e.Graphics.DrawString(mytext, printFont, _
    98. System.Drawing.Brushes.Black, 0, 0)
    99. End Sub
    100. Private Sub DruckenToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DruckenToolStripMenuItem1.Click
    101. 'Zum Drucken
    102. Dim Form1 As New PrintDocument
    103. 'Let the user to choose the page range to print.
    104. PrintDialog1.AllowSomePages = True
    105. 'Display the help button.
    106. PrintDialog1.ShowHelp = True
    107. PrintDialog1.Document = Form1
    108. Dim result As DialogResult = PrintDialog1.ShowDialog()
    109. If (result = DialogResult.OK) Then
    110. Form1.Print()
    111. End If
    112. End Sub
    113. Private Sub ÖffnenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DruckenToolStripMenuItem.Click
    114. 'Zum Öffnen der Rechnungsnummer
    115. Dim FileReader As StreamReader
    116. Dim results As DialogResult
    117. results = OpenFileDialog1.ShowDialog
    118. If results = DialogResult.OK Then
    119. FileReader = New StreamReader(OpenFileDialog1.FileName)
    120. txtRNR.Text = FileReader.ReadToEnd()
    121. FileReader.Close()
    122. End If
    123. End Sub
    124. Private Sub SpeichernToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OptionToolStripMenuItem.Click
    125. 'Zum Speichern der Rechnungsnummer
    126. Dim FileWriter As StreamWriter
    127. Dim results As DialogResult
    128. results = SaveFileDialog1.ShowDialog
    129. If results = DialogResult.OK Then
    130. FileWriter = New StreamWriter(SaveFileDialog1.FileName, False)
    131. FileWriter.Write(txtRNR.Text)
    132. FileWriter.Close()
    133. End If
    134. End Sub
    135. Private Sub MwStToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MwStToolStripMenuItem1.Click
    136. Const mehrwertsteuer As Integer = 19
    137. Const hundert As Integer = 100
    138. Dim ergebniss As Double
    139. Dim zahl_anfang As Double
    140. zahl_anfang = txtNetto.Text
    141. ergebniss = zahl_anfang / hundert * mehrwertsteuer + zahl_anfang
    142. txtBrutto.Text = ergebniss
    143. End Sub
    144. Private Sub MwStToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MwStToolStripMenuItem2.Click
    145. Dim ergebniss As Double
    146. Dim zahl_ende As Double
    147. zahl_ende = txtBrutto.Text
    148. ergebniss = zahl_ende / 1.19
    149. txtNetto.Text = ergebniss
    150. End Sub
    151. Private Sub MwSt19ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MwSt19ToolStripMenuItem.Click
    152. Dim ergebniss As Double
    153. Dim zahl_anfang As Double
    154. Dim zahl_ende As Double
    155. zahl_anfang = txtNetto.Text
    156. zahl_ende = txtBrutto.Text
    157. ergebniss = zahl_ende - zahl_anfang
    158. txtMwst.Text = ergebniss
    159. End Sub
    160. End Class

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

    Enrico schrieb:

    ich habe leider keinen Drucker hier um es zu testen
    Doch.
    Installier Dir einen PDF-Drucker und feddich.
    Alternativ nutze den PrintPreviewDialog wie im folgenden Beispiel:
    Form mit Button, PrintDocument:
    Ausdruck

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Using dlg = New PrintPreviewDialog
    4. dlg.Document = Me.PrintDocument1
    5. dlg.ShowDialog()
    6. End Using
    7. End Sub
    8. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    9. Dim g = e.Graphics
    10. Dim txt = "Preis:"
    11. Dim ft = New Font("Arial", 30)
    12. Dim rc = New RectangleF(New Point(30, 30), g.MeasureString(txt, ft))
    13. g.DrawString("Preis:", ft, Brushes.Black, New Point(30, 30))
    14. g.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)
    15. End Sub
    16. 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

    Danke werd ich probieren. In Zeile 12 seines codes kann man da auch die Schriftart und Größe , und in Zeile 14 und 16 das 30,30 in den klammern weglassen?
    Zeile 12 da ich verschiedene Schriftgrößen habe und Zeile 14 und 16 weil es auf dem kompletten A4 Blatt gedruckt werden soll.

    Danke bis jetzt für die hilfe

    RodFromGermany schrieb:

    wie im folgenden Beispiel:

    Enrico schrieb:

    da ich verschiedene Schriftgrößen habe
    ==>

    VB.NET-Quellcode

    1. Dim ft1 = New Font(...)
    2. Dim ft2 = New Font(...)
    3. Dim ft3 = New Font(...)

    Enrico schrieb:

    30,30 in den klammern
    ist die jeweilige Position auf Deinem Papier, musst Du halt anpassen.
    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!

    Enrico schrieb:

    jedes einzelne element
    Nicht jedes einzelne Element, sondern jeden einzelnen in sich geschlossenen Text.
    Es gibt eine DrawString-Überadung, da kannst Du einen Text in einem vorgegebenen Rechteck positionieren.
    Am besten, Du machst erst mal ein kleines Testprojekt und spielst mit der Druckausgabe rum, um sie besser zu begreifen.
    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!

    Enrico schrieb:

    Hast du dir das Screenshot angesehen
    Ja und?
    Wie soll denn Dein fertiger Druck aussehen?
    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!
    Dann musst Du in Deinem Druck sämtliche Texte Deiner Controls auslesen und explizit an der richtige Position ausgeben.
    Wo ist das Problem?
    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!
    Nur zur Überlegung:

    Gib doch die Rechnung als Word-Dokument aus. 1. Du hast das Word welches du autom. speichern lassen kannst und 2. kannst du es anschließend/ auch autom. drucken lassen.
    Entweder du generierst das Word komplett selber oder du machst es per Formular-Vorlage.

    Dies soll nur ein Vorschlag sein. Wenn du dich nun aber auf GDI/ PrintDocument festgelegt hast dann verfolge diesen Weg weiter.
    Ja das Problem ist das ich nicht weis wie man das anstellt da ich halt erst vor kurzem damit angefangen hab. Ich weis das man als Neuling erstmal kleinere Sachen machen soll aber da sich mein bekannter immer aufregt wenn er Rechnungen schreibt hab ich gedacht ich nehme das zum üben...
    Ich hab auch schon Google angestrengt aber nicht zu meinem Thema gefunden.

    Das mit dem word documenta wäre auch eine Überlegung nur sollte es denn halt automatisch im Hintergrund passieren da mein bekannter es gerne so einfach wie möglich hat....
    Also ich bin für verschiedene Möglichkeiten offen es muss halt nur für den Anwender einfach sein und nicht das er von einem zum anderen Programm wechseln muss...

    Enrico schrieb:

    das ich nicht weis wie man das anstellt
    Mal ein Beispiel mit 3 Texten, von denen 2 per Druckposition verknüpft sind und 3 Fonts:

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. Dim g = e.Graphics
    3. Dim txt = "Preis:"
    4. Dim preis = "10,30 €"
    5. Dim txt2 = "Es gelten die allgemeinen und besonderen und überhaupt bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla usw. SCHLUSS!"
    6. Dim ft1 = New Font("Arial", 30)
    7. Dim ft2 = New Font("Courier New", 30)
    8. Dim ft3 = New Font("Arial", 12)
    9. Dim sz = g.MeasureString(txt, ft1)
    10. g.DrawString(txt, ft1, Brushes.Black, New PointF(30, 30))
    11. g.DrawString(preis, ft2, Brushes.Brown, New PointF(30 + sz.Width, 30))
    12. Dim rc3 = New RectangleF(80, 1000, 700, 500)
    13. sz = g.MeasureString(txt2, ft2)
    14. g.DrawString(txt2, ft3, Brushes.Black, rc3)
    15. 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!
    @Enrico

    Ich schreibe zur Zeit selber an einem Rechnungsprogramm für meine Eltern. Wenn du dir ein Buch aus der Bibilothek oder von woanderes holst, kannst du rel. schnell die Grundlagen erlernen und auch anwenden. Mir hat das sehr geholfen und hilft mir immernoch.
    Du liegst richtig, dass du dein Programm so einfach wie möglich gestalten willst. Versuch dich auch ersteinmal auf das Wesentliche zu konzentrieren. Mein Rechnungsprogramm brauchte ca. ein halbes Jahr bis es ohne großartige Probleme lief d.h. aber nicht, dass es für mich als Programmierer simpel und einfach aufgebaut war. In der Zeit und auch jetzt noch habe ich das Programm in seiner ganzen Struktur ca. 5 Mal umgeschrieben oder komplett neu mit neuen Funktionen geschrieben. Das eben nur zur Info für Dich.
    Versuch am Anfang das Umzusetzen was Du kannst und nicht was dein Bekannt fordert. Das hindert dich nur ein deiner Programmierarbeit, weil du dann vor Problemen sitzt, die du noch nicht umsetzen aber kannst aber vl. in ein paar Monaten später, wenn du mehr gelernt hast.
    Ich finde auch, das dein Projekt sehr gut für dich als Einsteiger geeignet ist. Denn da hast du was, was produktiv eingesetzt wird. Was gibt es besseres für einen Einsteiger/ Hobby-Programmierer/ Anfänger.
    Ich danke euch schon mal recht herzlich für eure Hilfe und Geduld. Habe aber noch eine Frage: bei dem code von RodFromGermany kann ich da in Zeile 3 - 5 auch direkt die textboxen und label angeben oder muss da Text wie bei dir im code zusehen ist stehen?

    Enrico schrieb:

    kann ich da in Zeile 3 - 5 auch direkt die textboxen und label angeben
    Nein.
    Du musst die Text-Property Deiner Controls verwenden.
    Gib Deinem Projekt bitte mal Option Strict On.
    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!