VB.Net PrintPage Seiten Überlappen

  • VB.NET

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

    VB.Net PrintPage Seiten Überlappen

    Moin!

    Ich habe ein Problem beim Drucken mit VB.Net
    Mein Code sieht gekürzt so aus:

    Quellcode

    1. Public aktpage as integer
    2. Public printdoc As New PrintDocument
    3. Public Class Form_Drucken
    4. Private Sub PB_Drucken_Click(sender As Object, e As EventArgs) Handles PB_Drucken.Click
    5. AddHandler printdoc.PrintPage, AddressOf PDPrintPage
    6. aktpage = 0
    7. printdoc.Print()
    8. End Sub
    9. Private Sub PDPrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
    10. (...)
    11. If aktpage = 0 Then
    12. Call Inhalt(...)
    13. aktpage = 1
    14. e.HasMorePages = True
    15. ElseIf m_aktpage = 1 Then
    16. Call anderenInhalt(...)
    17. aktpage = 0
    18. e.HasMorePages = False
    19. End If
    20. End Sub


    Beim ersten Klick auf Drucken (PB_Drucken) läuft alles wunderbar, ich bekomme zwei Seiten ausgedruckt.

    Beim zweiten Klick auf Drucken werden beide Seiten übereinander gedruckt.

    Ich habe auch schon alle mir einfallenden Varianten benutzt, um aktpage zu erhöhen, abzufragen und auf null zu setzten.
    Setzte ich Haltepunkte an den entsprechenden Stellen, scheint auch alles zu funktionieren. Der Ausdruck ist trotzdem ab dem zweiten Klick übereinander.
    Wenn ich mein Form_Drucken schließe und neu öffne funktioniert es wieder für einen Klick.

    Ich freue mich auf hilfreiche Beiträge ^^
    @GreenLiv Willkommen im Forum. :thumbup:
    Du musst den Ausdruck jedes Mal neu initialisieren. Dafür gibt es das PrintDocument.BeginPrint-Event.
    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!
    Moin!

    Danke schonmal für die Antwort, ich kam leider erst jetzt zum ausprobieren.

    Der Code sieht jetzt folgendermaßen aus:


    Quellcode

    1. Private Sub PB_Drucken_Click(sender As Object, e As EventArgs) Handles PB_Drucken.Click
    2. printdoc.DocumentName = "NeuesDokument"
    3. Dim lMargins As Margins = New Margins(200, 190, 190, 200)
    4. printdoc.DefaultPageSettings.Margins = lMargins
    5. AddHandler printdoc.BeginPrint, AddressOf printdoc_BeginPrint
    6. AddHandler printdoc.PrintPage, AddressOf PDPrintPage
    7. printdoc.Print()
    8. End Sub
    9. Private Sub printdoc_BeginPrint(sender As System.Object, e As System.Drawing.Printing.PrintEventArgs)
    10. aktpage = 0
    11. End Sub
    12. Private Sub PDPrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
    13. If aktpage = 0 Then
    14. - Inhalt Seite 1 -
    15. aktpage = 1
    16. e.HasMorePages = True
    17. ElseIf aktpage = 1 Then
    18. - Inhalt Seite 2 -
    19. aktpage = 2
    20. e.HasMorePages = True
    21. ElseIf aktpage = 2 Then
    22. - Inhalt Seite 3 -
    23. e.HasMorePages = False
    24. End If
    25. End Sub


    Leider das gleiche Problem.
    Beim ersten Durchlauf druckt er alle 3 Seiten, beim zweiten druckt er Seite 1 und 2 übereinander, und beim dritten Durchlauf und allen folgenden alle drei Seiten übereinander.
    aktpage startet jedesmal brav bei null.
    Mit Haltepunkten in jeder if Abfrage ist mir aufgefallen, dass er bei dem zweiten Ausdruck die Druckroutine nach e.HasMorePages = False nicht beendet, sondern noch einmal aufruft, allerdings ohne in die If-Abfrage einzuspringen, obwohl aktpage ja immernoch 2 ist. Beim dritten Durchlauf passiert das nicht mehr.
    Ich hab auch schon das e.HasMorePages = aktpage < 3 (mit aktpage = 3 in der letzten If Abfrage) an Anfang und Ende gestellt, das hat auch nichts geändert.
    @GreenLiv Ich kann das leider nicht nachvollziehen.
    Kannst Du mal deinen Code posten, Du musst ja lediglich die Seitennummer ausgeben.
    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!
    Code:

    Spoiler anzeigen

    Quellcode

    1. Imports System.Drawing.Printing
    2. Public Class Form6
    3. Public printdoc As New PrintDocument
    4. Public m_aktpage As Integer
    5. Private Sub LB_Drucker_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LB_Drucker.SelectedIndexChanged
    6. ' Der Drucker für das aktuell zu druckende Dokument
    7. ' (printDoc) wird auf den ausgewählten Drucker gesetzt
    8. If LB_Drucker.SelectedIndex <> -1 Then
    9. ' im Combobox-Text steht der Name des Druckers
    10. printdoc.PrinterSettings.PrinterName = LB_Drucker.Text
    11. End If
    12. End Sub
    13. Private Sub PB_Drucken_Click(sender As Object, e As EventArgs) Handles PB_Drucken.Click
    14. printdoc.DocumentName = "NeuesDokument"
    15. Dim lMargins As Margins = New Margins(200, 190, 190, 200)
    16. printdoc.DefaultPageSettings.Margins = lMargins
    17. AddHandler printdoc.BeginPrint, AddressOf PDBeginPrint
    18. AddHandler printdoc.PrintPage, AddressOf PDPrintPage
    19. printdoc.Print()
    20. End Sub
    21. Private Sub PDBeginPrint(sender As System.Object, e As System.Drawing.Printing.PrintEventArgs) ' Handles printdoc.BeginPrint
    22. m_aktpage = 0 ' Startindex initialisieren
    23. End Sub
    24. Private Sub PDPrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
    25. ' Wird für jede Seite geloopt
    26. Dim myBrush = New SolidBrush(Color.Black)
    27. Dim myFontNorm As Font = New Font("Arial", 12)
    28. Dim Höhe As Double = e.PageBounds.Height / 100 * 25.4
    29. Dim Breite As Double = e.PageBounds.Width / 100 * 25.4
    30. ' Umstellen der Maßeinheit auf Millimeter
    31. e.Graphics.PageUnit = GraphicsUnit.Millimeter
    32. If m_aktpage = 0 Then
    33. Call Kopfzeile(myBrush, myFontNorm, e, Höhe, Breite)
    34. Call Title(myBrush, myFontNorm, e, Höhe, Breite)
    35. Call TEZF(myBrush, myFontNorm, e, Höhe, Breite)
    36. m_aktpage = 1
    37. ' e.HasMorePages = True
    38. ElseIf m_aktpage = 1 Then
    39. Call Kopfzeile(myBrush, myFontNorm, e, Höhe, Breite)
    40. Call Title(myBrush, myFontNorm, e, Höhe, Breite)
    41. Call Regenereignis(myBrush, myFontNorm, e, Höhe, Breite)
    42. m_aktpage = 2
    43. ' e.HasMorePages = True
    44. ElseIf m_aktpage = 2 Then
    45. 'e.HasMorePages = False
    46. Call Kopfzeile(myBrush, myFontNorm, e, Höhe, Breite)
    47. Call Title(myBrush, myFontNorm, e, Höhe, Breite)
    48. Call Ergebnis(myBrush, myFontNorm, e, Höhe, Breite)
    49. m_aktpage = 3
    50. ' e.HasMorePages = False
    51. End If
    52. e.HasMorePages = m_aktpage < 3
    53. End Sub
    54. Private Sub PB_vorschau_Click(sender As Object, e As EventArgs) Handles PB_vorschau.Click
    55. printdoc.DocumentName = "ErstesDokument"
    56. Dim lPP As PrintPreviewDialog
    57. lPP = New PrintPreviewDialog()
    58. lPP.Document = printdoc
    59. ' Seitenzähler auf Anfangswert!
    60. m_aktpage = 0
    61. ' Das Dokument mit seinem Handler verbinden
    62. AddHandler printdoc.PrintPage, AddressOf PDPrintPage
    63. ' Die Seiten des Druckbereichs festlegen
    64. Dim lMargins As Margins = New Margins(200, 190, 190, 200)
    65. printdoc.DefaultPageSettings.Margins = lMargins
    66. With lPP
    67. ' Der Druckvorschau das Dokument zuweisen
    68. .Document = printdoc
    69. ' Die Druckvorschau soll maximiert gezeigt werden
    70. .WindowState = FormWindowState.Maximized
    71. ' Druckvorschau anzeigen
    72. .ShowDialog(Me)
    73. End With
    74. lPP = Nothing
    75. m_aktpage = 0
    76. End Sub
    77. Sub Kopfzeile(myBrush As SolidBrush, myFontNorm As Font, ByVal e As PrintPageEventArgs, Höhe As Double, Breite As Double)
    78. Dim myDrawFormat As New StringFormat()
    79. Dim links As String
    80. If StrComp("", TB_Links.Text) <> 0 Then
    81. links = TB_Links.Text
    82. Else links = Nothing
    83. End If
    84. Dim Logoname As String
    85. Dim Logopfad As String
    86. If My.Computer.FileSystem.FileExists(My.Computer.FileSystem.CurrentDirectory & "\Logos\" & LB_Logo.SelectedItem & ".jpg") = True Then
    87. Logoname = LB_Logo.SelectedItem
    88. Logopfad = My.Computer.FileSystem.CurrentDirectory & "\Logos\" & LB_Logo.SelectedItem & ".jpg"
    89. Else
    90. Logoname = Nothing
    91. End If
    92. Dim Mitte As String
    93. If StrComp("", TB_Mitte.Text) <> 0 Then
    94. Mitte = TB_Mitte.Text
    95. Else Mitte = Nothing
    96. End If
    97. Dim Rechts As String
    98. If StrComp("", TB_Rechts.Text) <> 0 And IsNothing(Logoname) = True Then
    99. Rechts = TB_Rechts.Text
    100. Else Rechts = Nothing
    101. End If
    102. ' Linkes Feld einfügen
    103. If links IsNot Nothing Then
    104. myBrush = New SolidBrush(Color.Black)
    105. myFontNorm = New Font("Arial", 8)
    106. myDrawFormat.Alignment = StringAlignment.Center
    107. Dim myX As Double = e.PageBounds.Left + Breite / 100 * 10
    108. Dim myY As Double = e.PageBounds.Top + Höhe / 100 * 2.5
    109. e.Graphics.DrawString(links, myFontNorm, myBrush, myX, myY, myDrawFormat)
    110. End If
    111. ' Mittleres Feld einfügen
    112. If Mitte IsNot Nothing Then
    113. myBrush = New SolidBrush(Color.Black)
    114. myFontNorm = New Font("Arial", 8)
    115. myDrawFormat.Alignment = StringAlignment.Center
    116. Dim myX As Double = e.PageBounds.Left + Breite / 100 * 50
    117. Dim myY As Double = e.PageBounds.Top + Höhe / 100 * 2.5
    118. e.Graphics.DrawString(Mitte, myFontNorm, myBrush, myX, myY, myDrawFormat)
    119. End If
    120. ' Rechtes Feld einfügen
    121. If Rechts IsNot Nothing Then
    122. myBrush = New SolidBrush(Color.Black)
    123. myFontNorm = New Font("Arial", 8)
    124. myDrawFormat.Alignment = StringAlignment.Center
    125. Dim myX As Double = e.PageBounds.Left + Breite / 100 * 90
    126. Dim myY As Double = e.PageBounds.Top + Höhe / 100 * 2.5
    127. e.Graphics.DrawString(Rechts, myFontNorm, myBrush, myX, myY, myDrawFormat)
    128. End If
    129. ' Logo einfügen
    130. If Logoname IsNot Nothing And Logopfad IsNot Nothing Then
    131. Dim myimage As Image = Image.FromFile(Logopfad)
    132. Dim NeueHöhe As Integer = Höhe / 100 * 7.5
    133. Dim NeueBreite As Integer = Breite / 100 * 7.5
    134. Dim Seitenverhältnis As Double
    135. Seitenverhältnis = myimage.Height / myimage.Width
    136. If NeueHöhe > NeueBreite * Seitenverhältnis Then
    137. NeueBreite = NeueHöhe / Seitenverhältnis
    138. Else
    139. NeueHöhe = NeueBreite * Seitenverhältnis
    140. End If
    141. Dim myXlinks As Double = e.PageBounds.Left + Breite / 100 * 75
    142. Dim myXrechts As Double = e.PageBounds.Left + Breite / 100 * 75 + NeueBreite
    143. Dim myYoben As Double = e.PageBounds.Top + Höhe / 100 * 2.5
    144. Dim myYunten As Double = e.PageBounds.Top + Höhe / 100 * 2.5 + NeueHöhe
    145. ' Create parallelogram for drawing image.
    146. Dim ulCorner As New Point(myXlinks, myYoben)
    147. Dim urCorner As New Point(myXrechts, myYoben)
    148. Dim llCorner As New Point(myXlinks, myYunten)
    149. Dim destPara As Point() = {ulCorner, urCorner, llCorner}
    150. ' Draw image to screen.
    151. e.Graphics.DrawImage(myimage, destPara)
    152. End If
    153. End Sub
    154. Sub Title(myBrush As SolidBrush, myFontNorm As Font, ByVal e As PrintPageEventArgs, Höhe As Double, Breite As Double)
    155. myBrush = New SolidBrush(Color.Black)
    156. myFontNorm = New Font("Arial", 12, FontStyle.Underline)
    157. Dim myDrawFormat As New StringFormat()
    158. myDrawFormat.Alignment = StringAlignment.Center
    159. Dim myX As Double = e.PageBounds.Left + Breite / 2
    160. Dim myY As Double = e.PageBounds.Top + Höhe / 100 * 10
    161. e.Graphics.DrawString("Muldenversickerung gemäß DWA 138", myFontNorm, myBrush, myX, myY, myDrawFormat)
    162. e.HasMorePages = False
    163. End Sub
    164. Sub TEZF(myBrush As SolidBrush, myFontNorm As Font, ByVal e As PrintPageEventArgs, Höhe As Double, Breite As Double)
    165. Dim myDrawFormat As New StringFormat()
    166. 'Eingangsparameter eintragen
    167. myBrush = New SolidBrush(Color.Black)
    168. myFontNorm = New Font("Arial", 12)
    169. myDrawFormat.Alignment = StringAlignment.Center
    170. Dim myX As Double = e.PageBounds.Left + Breite / 2
    171. Dim myY As Double = e.PageBounds.Top + Höhe / 100 * 15
    172. e.Graphics.DrawString("Teileinzugsflächen", myFontNorm, myBrush, myX, myY, myDrawFormat)
    173. 'Überschriften
    174. myBrush = New SolidBrush(Color.Black)
    175. myFontNorm = New Font("Arial", 10, FontStyle.Bold)
    176. myDrawFormat.Alignment = StringAlignment.Near
    177. Dim xbez As Double = e.PageBounds.Left + 25
    178. Dim xarea As Double = e.PageBounds.Left + 25 + Breite / 100 * 15
    179. Dim xphi As Double = e.PageBounds.Left + 25 + Breite / 100 * 30
    180. Dim xared As Double = e.PageBounds.Left + 25 + Breite / 100 * 45
    181. Dim xQ As Double = e.PageBounds.Left + 25 + Breite / 100 * 60
    182. myY = e.PageBounds.Top + Höhe / 100 * 20
    183. e.Graphics.DrawString("Bezeichnung", myFontNorm, myBrush, xbez, myY, myDrawFormat)
    184. e.Graphics.DrawString("Einzugsfläche", myFontNorm, myBrush, xarea, myY, myDrawFormat)
    185. e.Graphics.DrawString("Abflussbeiwert", myFontNorm, myBrush, xphi, myY, myDrawFormat)
    186. e.Graphics.DrawString("undurchl. Fläche", myFontNorm, myBrush, xared, myY, myDrawFormat)
    187. e.Graphics.DrawString("Abfluss", myFontNorm, myBrush, xQ, myY, myDrawFormat)
    188. 'mit Leben füllen
    189. Dim counter As Integer = Form4.TXT_counter.Text - 1
    190. myFontNorm = New Font("Arial", 10)
    191. Dim absatz As Integer = Höhe / 100 * 2.5
    192. For i = 0 To counter
    193. myY = myY + 2 * absatz + (i + 1) * absatz
    194. e.Graphics.DrawString(Form4.Controls("TB_Bezeichnung" & i).Text, myFontNorm, myBrush, xbez, myY, myDrawFormat)
    195. e.Graphics.DrawString(Form4.Controls("TB_Area" & i).Text, myFontNorm, myBrush, xarea, myY, myDrawFormat)
    196. e.Graphics.DrawString(Form4.Controls("TB_phi" & i).Text, myFontNorm, myBrush, xphi, myY, myDrawFormat)
    197. e.Graphics.DrawString(Form4.Controls("TB_Ared" & i).Text, myFontNorm, myBrush, xared, myY, myDrawFormat)
    198. e.Graphics.DrawString(Form4.Controls("TB_Ared" & i).Text, myFontNorm, myBrush, xQ, myY, myDrawFormat)
    199. Next
    200. Dim greyPen As New Pen(Color.Gray, 0.25)
    201. Dim point1 As New Point(myX, myY)
    202. Dim point2 As New Point(myX + Breite - 50, myY)
    203. e.Graphics.DrawLine(greyPen, point1, point2)
    204. End Sub
    205. Sub Regenereignis(myBrush As SolidBrush, myFontNorm As Font, ByVal e As PrintPageEventArgs, Höhe As Double, Breite As Double)
    206. Dim myDrawFormat As New StringFormat()
    207. Dim Ort As String = Regenspende.TB_Ort.Text
    208. Dim Jahre As Integer = Regenspende.TB_Jahre.Text
    209. Dim Dauern As Integer = Regenspende.TB_Dauern.Text
    210. 'Untertitel einfügen
    211. myBrush = New SolidBrush(Color.Black)
    212. myFontNorm = New Font("Arial", 12)
    213. myDrawFormat.Alignment = StringAlignment.Center
    214. Dim myX As Double = e.PageBounds.Left + Breite / 2
    215. Dim myY As Double = e.PageBounds.Top + Höhe / 100 * 15
    216. e.Graphics.DrawString("Regenspende gem. KOSTRA für " & Ort, myFontNorm, myBrush, myX, myY, myDrawFormat)
    217. myDrawFormat.Alignment = StringAlignment.Near
    218. myFontNorm = New Font("Arial", 10)
    219. myX = e.PageBounds.Left + Breite / 100 * 10
    220. myY = e.PageBounds.Top + Höhe / 100 * 17.5
    221. e.Graphics.DrawString("T [ a ], d [min ], R [ l / (s x ha) ]", myFontNorm, myBrush, myX, myY, myDrawFormat)
    222. 'Jährlichkeiten einfügen
    223. myBrush = New SolidBrush(Color.Black)
    224. myFontNorm = New Font("Arial", 10)
    225. myDrawFormat.Alignment = StringAlignment.Far
    226. myY = e.PageBounds.Top + Höhe / 100 * 20
    227. Dim minY As Double = myY
    228. Dim maxX As Double
    229. For i = 1 To Jahre
    230. myX = e.PageBounds.Left + 25 + Breite / 10 * i
    231. e.Graphics.DrawString(Regenspende.Controls("TXT_Jahr" & i).Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    232. If i = Jahre Then
    233. maxX = myX
    234. End If
    235. Next
    236. ' Dauern einfügen
    237. myBrush = New SolidBrush(Color.Black)
    238. myFontNorm = New Font("Arial", 10)
    239. myDrawFormat.Alignment = StringAlignment.Far
    240. myX = e.PageBounds.Left + 25
    241. Dim minX As Double = myX
    242. Dim maxY As Double
    243. For i = 1 To Dauern
    244. myY = e.PageBounds.Top + Höhe / 100 * 20 + Höhe / 100 * 2.5 * i
    245. e.Graphics.DrawString(Regenspende.Controls("TXT_Dauer" & i).Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    246. If i = Dauern Then
    247. maxY = myY
    248. End If
    249. Next
    250. ' Tabelle zeichnen
    251. minY = minY + Höhe / 100 * 2
    252. maxY = maxY + Höhe / 100 * 2
    253. minX = minX + Breite / 100 * 1
    254. maxX = maxX + Breite / 100 * 1
    255. Dim blackPen As New Pen(Color.Black, 0.5)
    256. Dim greyPen As New Pen(Color.Gray, 0.25)
    257. Dim point1 As New Point(minX, minY)
    258. Dim point2 As New Point(minX, maxY)
    259. Dim point3 As New Point(maxX, minY)
    260. e.Graphics.DrawLine(blackPen, point1, point2)
    261. e.Graphics.DrawLine(blackPen, point1, point3)
    262. 'Regenspenden einfügen
    263. myBrush = New SolidBrush(Color.Black)
    264. myFontNorm = New Font("Arial", 10)
    265. myDrawFormat.Alignment = StringAlignment.Far
    266. For j = 1 To Jahre
    267. myX = e.PageBounds.Left + 25 + Breite / 10 * j
    268. For d = 1 To Dauern
    269. myY = e.PageBounds.Top + Höhe / 100 * 20 + Höhe / 100 * 2.5 * d
    270. e.Graphics.DrawString(Regenspende.Controls("TB_" & d + (Dauern * (j - 1))).Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    271. If j = Jahre Then
    272. Dim minpoint As New Point(minX, myY + Höhe / 100 * 2)
    273. Dim maxpoint As New Point(maxX, myY + Höhe / 100 * 2)
    274. e.Graphics.DrawLine(greyPen, minpoint, maxpoint)
    275. End If
    276. Next d
    277. Next j
    278. End Sub
    279. Sub Ergebnis(myBrush As SolidBrush, myFontNorm As Font, ByVal e As PrintPageEventArgs, Höhe As Double, Breite As Double)
    280. Dim myDrawFormat As New StringFormat()
    281. 'Eingangsparameter eintragen
    282. myBrush = New SolidBrush(Color.Black)
    283. myFontNorm = New Font("Arial", 12)
    284. myDrawFormat.Alignment = StringAlignment.Center
    285. Dim myX As Double = e.PageBounds.Left + Breite / 2
    286. Dim myY As Double = e.PageBounds.Top + Höhe / 100 * 15
    287. e.Graphics.DrawString("Nachweis der Muldenversickerung", myFontNorm, myBrush, myX, myY, myDrawFormat)
    288. 'Eingangsparameter Hauptzeile
    289. myBrush = New SolidBrush(Color.Black)
    290. myFontNorm = New Font("Arial", 10, FontStyle.Bold)
    291. myDrawFormat.Alignment = StringAlignment.Near
    292. myY = e.PageBounds.Top + Höhe / 100 * 20
    293. myX = e.PageBounds.Left + 25 '+ Breite / 10
    294. e.Graphics.DrawString("Eingangsparameter:", myFontNorm, myBrush, myX, myY, myDrawFormat)
    295. 'Eingangsparameter aufzählen
    296. myFontNorm = New Font("Arial", 10)
    297. Dim absatz As Integer = Höhe / 100 * 2.5
    298. Dim Zeilensprung As Integer = Höhe / 100 * 1.25
    299. myY = myY + absatz
    300. e.Graphics.DrawString("undurchlässige Fläche: Au = " & Form_Mulde.TB_As.Text & " m²", myFontNorm, myBrush, myX, myY, myDrawFormat)
    301. myY = myY + absatz
    302. e.Graphics.DrawString("untersuchte Wiederkehrzeit: T = " & Form_Mulde.LB_Jahr.SelectedItem & " Jahre", myFontNorm, myBrush, myX, myY, myDrawFormat)
    303. myY = myY + absatz
    304. e.Graphics.DrawString("angenommene Durchlässigkeit: kf = " & Form_Mulde.TB_Kf.Text & " m / s", myFontNorm, myBrush, myX, myY, myDrawFormat)
    305. myY = myY + absatz
    306. Dim greyPen As New Pen(Color.Gray, 0.25)
    307. Dim point1 As New Point(myX, myY)
    308. Dim point2 As New Point(myX + Breite - 50, myY)
    309. e.Graphics.DrawLine(greyPen, point1, point2)
    310. 'Geometrie Hauptzeile:
    311. myFontNorm = New Font("Arial", 10, FontStyle.Bold)
    312. myY = myY + absatz
    313. e.Graphics.DrawString("Muldengeometrie:", myFontNorm, myBrush, myX, myY, myDrawFormat)
    314. 'Geometrie aufzählen
    315. myFontNorm = New Font("Arial", 10)
    316. myY = myY + absatz
    317. e.Graphics.DrawString("Länge der Mulde: l = " & Form_Mulde.TB_l.Text & " m", myFontNorm, myBrush, myX, myY, myDrawFormat)
    318. myY = myY + absatz
    319. e.Graphics.DrawString("Breite der Mulde: b = " & Form_Mulde.TB_m.Text & " m", myFontNorm, myBrush, myX, myY, myDrawFormat)
    320. myY = myY + absatz
    321. e.Graphics.DrawString("mittlere Sickerfläche: As = " & Form_Mulde.TB_As.Text & " m", myFontNorm, myBrush, myX, myY, myDrawFormat)
    322. myY = myY + absatz
    323. e.Graphics.DrawString("maximale Tiefe der Mulde: h = " & Form_Mulde.TB_h1.Text & " m", myFontNorm, myBrush, myX, myY, myDrawFormat)
    324. myY = myY + absatz
    325. point1 = New Point(myX, myY)
    326. point2 = New Point(myX + Breite - 50, myY)
    327. e.Graphics.DrawLine(greyPen, point1, point2)
    328. 'Ergebnis Hauptzeile:
    329. myFontNorm = New Font("Arial", 10, FontStyle.Bold)
    330. myY = myY + absatz
    331. e.Graphics.DrawString("Ergebnis:", myFontNorm, myBrush, myX, myY, myDrawFormat)
    332. 'Ergebnis aufzählen
    333. myFontNorm = New Font("Arial", 10)
    334. myY = myY + absatz
    335. e.Graphics.DrawString("maßgebende Regenspende:", myFontNorm, myBrush, myX, myY, myDrawFormat)
    336. myY = myY + Zeilensprung
    337. e.Graphics.DrawString("d = " & Form_Mulde.TXT_Dauer.Text & " min", myFontNorm, myBrush, myX, myY, myDrawFormat)
    338. myY = myY + Zeilensprung
    339. e.Graphics.DrawString("r = " & Form_Mulde.TXT_rdn.Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    340. myY = myY + absatz
    341. e.Graphics.DrawString("Erforderliches Volumen: Verf = " & Form_Mulde.TXT_vmax.Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    342. myY = myY + Zeilensprung
    343. e.Graphics.DrawString("Vorhandenes Volumen: Vvor = " & Form_Mulde.TXT_vorhV.Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    344. myY = myY + Zeilensprung
    345. e.Graphics.DrawString("folgende Volumenbilanz: Vdif = " & Form_Mulde.TXT_Dif.Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    346. myY = myY + absatz
    347. point1 = New Point(myX, myY)
    348. point2 = New Point(myX + Breite - 50, myY)
    349. e.Graphics.DrawLine(greyPen, point1, point2)
    350. 'Toleranz Hauptzeile:
    351. myFontNorm = New Font("Arial", 10, FontStyle.Bold)
    352. myY = myY + absatz
    353. e.Graphics.DrawString("Toleranz der Regenspende:", myFontNorm, myBrush, myX, myY, myDrawFormat)
    354. 'Toleranz aufzählen
    355. myFontNorm = New Font("Arial", 10)
    356. myY = myY + absatz
    357. e.Graphics.DrawString("untersuchte Wiederkehrzeit: T = " & Form_Mulde.TXT_Jahr.Text & " Jahre", myFontNorm, myBrush, myX, myY, myDrawFormat)
    358. myY = myY + absatz
    359. e.Graphics.DrawString("Toleranz nach KOSTRA :" & Form_Mulde.TXT_Abweichung.Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    360. myY = myY + Zeilensprung
    361. e.Graphics.DrawString("obere Abweichung: Verf,oben = " & Form_Mulde.TXT_Oben.Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    362. myY = myY + Zeilensprung
    363. e.Graphics.DrawString("untere Abweichung: Verf,unten = " & Form_Mulde.TXT_unten.Text, myFontNorm, myBrush, myX, myY, myDrawFormat)
    364. End Sub
    365. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles PB_Logo.Click
    366. Dim path As String
    367. Dim myname As String
    368. Dim myStream As IO.Stream = Nothing
    369. Dim openFileDialog1 As New OpenFileDialog()
    370. openFileDialog1.Filter = "Bilddatein|*.jpg"
    371. openFileDialog1.Title = "Wählen Sie ein Logo als Bilddatei aus"
    372. If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    373. myStream = openFileDialog1.OpenFile()
    374. path = DirectCast(myStream, System.IO.FileStream).Name
    375. End If
    376. myname = InputBox("Geben Sie eine Bezeichnung für das Logo ein!", "Logo Speichern", "", 600, 400)
    377. If StrComp(myname, "") = 0 Then
    378. Exit Sub
    379. End If
    380. Dim save As String = My.Computer.FileSystem.CurrentDirectory & "\Logos\" & myname & ".jpg"
    381. System.IO.File.Copy(path, save)
    382. LB_Logo.Items.Add(myname)
    383. End Sub
    384. Private Sub PB_Exit_Click(sender As Object, e As EventArgs) Handles PB_Exit.Click
    385. Me.Close()
    386. End Sub
    387. Private Sub LB_Logo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LB_Logo.SelectedIndexChanged
    388. If LB_Logo.SelectedItem = "ohne" Then
    389. TB_Rechts.Enabled = True
    390. TXT_Rechts.Enabled = True
    391. Else
    392. TB_Rechts.Enabled = False
    393. TXT_Rechts.Enabled = False
    394. End If
    395. End Sub
    396. End Class
    Dateien
    • Druck1.pdf

      (46,71 kB, 124 mal heruntergeladen, zuletzt: )
    • Druck2.pdf

      (45,97 kB, 278 mal heruntergeladen, zuletzt: )
    • Druck3.pdf

      (45,11 kB, 254 mal heruntergeladen, zuletzt: )
    @GreenLiv Ich konnte es nachvollziehen.
    Das passiert nur, wenn Du mit printdoc.Print() den Druck startest, das ist eigentlich nicht der Plan von Bill.
    Du solltest den Druck aus dem PrintPreviewDialog heraus starten, da ist gesichert, dass das Dokument korrekt initialisiert wird.
    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!