Seitenwechsel beim Drucken

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

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von JLH.

    Seitenwechsel beim Drucken

    Hallo. Ich hänge mal wieder fest. Ich habe mir das Tutorial zum drucken mehrere Seiten durchgelesen und verstehe trotzdem nicht wie man definiert welcher Ausschnitt auf der ersten und welcher auf der zweiten gedruckt werden soll... Mein Programm berechnet die Daten einer Verzahnung. Der User kann zu beginn auswählen welche Werte er berechnen lassen möchte. Je nach Auswahl entstehen mehr oder weniger Zeilen die gedruckt werden sollen. Anhand der Auswahl kann ich vor dem Druck schon die benötigten Zeilen ermitteln. Ich weiß also wo ich gerne die nächste Seite beginnen lassen möchte. Das Programm ist ursprünglich in VB6 und ich versuche den Code weitestgehend zu übernehmen.

    Das mit dem Index funktioniert nur bedingt und ist eigentlich auch mein Problem. So wieder Code abgebildet ist druckt er nie die ersten Zeilen, das ist klar... So wie ich es mir denke müßte ich vor jedem zu druckenden Wert eine abfrage machen die prüft auf welcher Seite gedruckt wird. Wie geht man da richtig vor?

    Spoiler anzeigen

    Quellcode

    1. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. RZ = 1
    3. 'Anzahl der Zeilen bestimmen
    4. Bedarf = 145
    5. If frmEvo_S1.Check1.CheckState = 1 Then
    6. Bedarf = Bedarf + 124
    7. End If
    8. If frmEvo_S1.Check2.CheckState = 1 Then
    9. Bedarf = Bedarf + 188
    10. End If
    11. If frmEvo_S1.Check3.CheckState = 1 Then
    12. Bedarf = Bedarf + 93
    13. End If
    14. If frmEvo_S1.Check4.CheckState = 1 Then
    15. Bedarf = Bedarf + 119
    16. End If
    17. If frmEvo_S1.Check5.CheckState = 1 Then
    18. Bedarf = Bedarf + 53
    19. End If
    20. If frmEvo_S1.Check6.CheckState = 1 Then
    21. Bedarf = Bedarf + 53
    22. End If
    23. If frmEvo_S1.Check7.CheckState = 1 Then
    24. Bedarf = Bedarf + 137
    25. End If
    26. If frmEvo_S10.Check2.CheckState = 1 Then
    27. RZ = 2
    28. End If
    29. If frmEvo_S10.Check3.CheckState = 1 Then
    30. RZ = 3
    31. End If
    32. If frmEvo_S10.Check4.CheckState = 1 Then
    33. RZ = 4
    34. End If
    35. If frmEvo_S10.Check5.CheckState = 1 Then
    36. RZ = 5
    37. End If
    38. If frmEvo_S1.Check9.CheckState = 1 Then
    39. Bedarf = Bedarf + 72 + RZ * 13
    40. End If
    41. If frmEvo_S1.Check10.CheckState = 1 Then
    42. Bedarf = Bedarf + 72 + RZ * 13
    43. End If
    44. If frmEvo_S13.Check2.CheckState = 1 Then
    45. RZ = 2
    46. End If
    47. If frmEvo_S13.Check3.CheckState = 1 Then
    48. RZ = 3
    49. End If
    50. If frmEvo_S1.Check12.CheckState = 1 Then
    51. Bedarf = Bedarf + 83 + RZ * 13
    52. End If
    53. If frmEvo_S1.Check11.CheckState = 1 Then
    54. Bedarf = Bedarf + 137
    55. End If
    56. If frmEvo_S1.Check13.CheckState = 1 Then
    57. Bedarf = Bedarf + 137
    58. End If
    59. If Bedarf > 1100 Then
    60. e.HasMorePages = Index < 1 ' True bei index >= 2
    61. Index += 1 ' nächste Seite
    62. End If
    63. 'Lochermarkierung für 1.Seite
    64. e.Graphics.DrawLine(BlackPen, 0, Mitte, 30, Mitte)
    65. 'Überschrift *************************************************************************************************************************************************
    66. If Index = 0 Then
    67. Ausgabe = Space(84)
    68. Mid(Ausgabe, 2, Len(txtKunde.Text)) = txtKunde.Text
    69. Mid(Ausgabe, 36, Len(txtKomNr.Text)) = txtKomNr.Text
    70. Mid(Ausgabe, 50, Len(Today) + 2) = CStr(Today)
    71. LAENGE = Len(txtBearbeiter.Text)
    72. POS = 75 - LAENGE + 1
    73. Mid(Ausgabe, POS, LAENGE) = txtBearbeiter.Text
    74. YPos = YPos + Zeile
    75. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    76. 'Underline *********
    77. Ausgabe = Space(1)
    78. For J = 1 To 74
    79. Ausgabe = Ausgabe & "*"
    80. Next J
    81. YPos = YPos + Zeile
    82. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    83. End If
    84. 'Basis-Parameter *************************************************************************************************************************************************
    85. If Index = 0 Then
    86. Ausgabe = Space(50)
    87. Mid(Ausgabe, 2, 17) = "BASIS-PARAMETER :"
    88. YPos = YPos + Zeile * 1.5
    89. e.Graphics.DrawString(String.Format(Ausgabe), New Font(FontDrucker, FontStyle.Bold), Brushes.Black, New Point(XPos, YPos))
    90. Ausgabe = Space(41)
    91. Mid(Ausgabe, 2, 17) = "-----------------"
    92. YPos = YPos + Zeile * 0.6
    93. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    94. Wert = M
    95. Teil = "ZÄHNEZAHL" & Space(8) & "MODUL"
    96. Zusammenstellen()
    97. Wert = FormatNumber(Z, 0)
    98. Mid(Ausgabe, 12, Len(Wert)) = Wert
    99. Ausgabe1 = Ausgabe
    100. Wert = EW
    101. Teil = "EINGRIFFSWINKEL......."
    102. Zusammenstellen()
    103. Ausgabe = (Ausgabe1 & Space(7) & Ausgabe)
    104. YPos = YPos + Zeile
    105. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    106. If MI = 0 Then GoTo Basis1
    107. Wert = MI
    108. Teil = "INNEN-ROLLENMASS MI..."
    109. Zusammenstellen()
    110. Ausgabe1 = Ausgabe
    111. Wert = RI
    112. Teil = "MESSROLLE RI.........."
    113. Zusammenstellen()
    114. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    115. Basis1:
    116. If MAB = 0 Then GoTo Basis2
    117. Wert = MAB
    118. Teil = "AUSSEN-ROLLENMASS MA.."
    119. Zusammenstellen()
    120. Ausgabe1 = Ausgabe
    121. Wert = RAB
    122. Teil = "MESSROLLE RA.........."
    123. Zusammenstellen()
    124. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    125. Basis2:
    126. If WXZ = 0 Then GoTo Basis3
    127. Wert = WXZ
    128. Teil = "ZAHNWEITE WXZ........."
    129. Zusammenstellen()
    130. Ausgabe1 = Ausgabe
    131. Wert = XZ
    132. Teil = "MESSZÄHNEZAHL........."
    133. Zusammenstellen()
    134. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    135. Basis3:
    136. If SX = 0 Then GoTo Basis4
    137. Wert = SX
    138. Teil = "BOGENZAHNDICKE SX....."
    139. Zusammenstellen()
    140. Ausgabe1 = Ausgabe
    141. Wert = DX
    142. Teil = "DURCHMESSER DX........"
    143. Zusammenstellen()
    144. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    145. Basis4:
    146. If S0 = 0 Then GoTo Basis5
    147. Wert = S0
    148. Teil = "BOGENZAHNDICKE S0....."
    149. Zusammenstellen()
    150. Ausgabe = Ausgabe
    151. Basis5:
    152. If MI Or MAB Or WXZ Or SX Or S0 Then GoTo Basis6
    153. Wert = XM
    154. '
    155. Teil = "PROFILVERSCHIEBUNG X*M"
    156. Zusammenstellen()
    157. Ausgabe = Ausgabe
    158. YPos = YPos + Zeile
    159. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    160. Basis6:
    161. Wert = LG
    162. Teil = "LG/2.................."
    163. Zusammenstellen()
    164. Ausgabe1 = Ausgabe
    165. Wert = RG
    166. Teil = "RG...................."
    167. Zusammenstellen()
    168. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    169. YPos = YPos + Zeile * 2
    170. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    171. Wert = D0
    172. Teil = "TEILKREIS-DURCHM. D0.."
    173. Zusammenstellen()
    174. Ausgabe1 = Ausgabe
    175. Wert = SXF(6)
    176. Teil = "BOGENZAHNDICKE S0....."
    177. Zusammenstellen()
    178. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    179. YPos = YPos + Zeile
    180. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    181. Wert = SA
    182. Teil = "SPITZE AUSSEN........."
    183. Zusammenstellen()
    184. Ausgabe1 = Ausgabe
    185. Wert = SI
    186. Teil = "SPITZE INNEN.........."
    187. Zusammenstellen()
    188. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    189. YPos = YPos + Zeile
    190. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    191. Wert = PV_Renamed
    192. Teil = "PROFILVERSCHIEBUNG X*M"
    193. Zusammenstellen()
    194. Ausgabe = Ausgabe
    195. YPos = YPos + Zeile
    196. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    197. End If
    198. 'theoretisches Profil*************************************************************************************************************************************************
    199. If frmEvo_S1.Check1.CheckState = 1 And Index = 0 Then
    200. Ausgabe = Space(50)
    201. Mid(Ausgabe, 2, 22) = "THEORETISCHES PROFIL :"
    202. YPos = YPos + Zeile * 1.5
    203. e.Graphics.DrawString(String.Format(Ausgabe), New Font(FontDrucker, FontStyle.Bold), Brushes.Black, New Point(XPos, YPos))
    204. Ausgabe = Space(50)
    205. Mid(Ausgabe, 2, 22) = "----------------------"
    206. YPos = YPos + Zeile * 0.6
    207. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    208. Wert = PD(1)
    209. Teil = "FORMKREIS INNEN......."
    210. Zusammenstellen()
    211. Ausgabe1 = Ausgabe
    212. Wert = PD(3)
    213. Teil = "FORMKREIS AUSSEN......"
    214. Zusammenstellen()
    215. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    216. YPos = YPos + Zeile
    217. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    218. YPos = YPos + Zeile
    219. For J = 1 To 3
    220. Wert = PD(J)
    221. Teil = "KOORDINATEN IM DURCHM."
    222. Zusammenstellen()
    223. Ausgabe1 = Ausgabe
    224. Wert = YKR(J)
    225. NR = Trim(Str(J))
    226. Teil = "X" & NR & "= Y" & NR & "="
    227. Zusammenstellen()
    228. Wert = FormatNumber(XKR(J), 6)
    229. POS = 15 - Len(Wert)
    230. Mid(Ausgabe, POS, Len(Wert)) = Wert
    231. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    232. YPos = YPos + Zeile
    233. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    234. Next J
    235. Ausgabe = (" THEORETISCHE EINSTELLDATEN:")
    236. YPos = YPos + Zeile * 1.5
    237. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    238. Ausgabe = Space(52)
    239. Mid(Ausgabe, 2, 3) = "XT="
    240. Wert = FormatNumber(XT, 6)
    241. POS = 16 - Len(Wert)
    242. Mid(Ausgabe, POS, Len(Wert)) = Wert
    243. Mid(Ausgabe, 20, 3) = "YT="
    244. Wert = FormatNumber(YT, 6)
    245. POS = 34 - Len(Wert)
    246. Mid(Ausgabe, POS, Len(Wert)) = Wert
    247. Mid(Ausgabe, 38, 3) = "RT="
    248. Wert = FormatNumber(RT, 6)
    249. POS = 52 - Len(Wert)
    250. Mid(Ausgabe, POS, Len(Wert)) = Wert
    251. YPos = YPos + Zeile
    252. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    253. End If
    254. 'Formfehler bei Kreisbogen *************************************************************************************************************************************************
    255. If frmEvo_S1.Check2.CheckState = 1 Then
    256. Ausgabe = Space(50)
    257. Mid(Ausgabe, 2, 27) = "FORMFEHLER BEI KREISBOGEN :"
    258. YPos = YPos + Zeile * 1.5
    259. e.Graphics.DrawString(String.Format(Ausgabe), New Font(FontDrucker, FontStyle.Bold), Brushes.Black, New Point(XPos, YPos))
    260. Ausgabe = Space(50)
    261. Mid(Ausgabe, 2, 27) = "---------------------------"
    262. YPos = YPos + Zeile * 0.6
    263. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    264. Wert = PD(5)
    265. Teil = "PRÜFDURCHM: INNEN....."
    266. Zusammenstellen()
    267. Ausgabe1 = Ausgabe
    268. Wert = PD(6)
    269. Teil = "PRÜFDURCHM. AUSSEN...."
    270. Zusammenstellen()
    271. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    272. YPos = YPos + Zeile
    273. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    274. Ausgabe = Space(70)
    275. Mid(Ausgabe, 2, 7) = "DURCHM."
    276. Mid(Ausgabe, 22, 7) = "DURCHM."
    277. Mid(Ausgabe, 39, 7) = "DURCHM."
    278. Mid(Ausgabe, 56, 7) = "DURCHM."
    279. Mid(Ausgabe, 16, 1) = "µ"
    280. Mid(Ausgabe, 33, 1) = "µ"
    281. Mid(Ausgabe, 50, 1) = "µ"
    282. Mid(Ausgabe, 67, 1) = "µ"
    283. Ausgabe = Ausgabe
    284. YPos = YPos + Zeile * 2
    285. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    286. YPos = YPos + Zeile * 1.4
    287. e.Graphics.DrawLine(BlackPen, XPos + 14, YPos, XPos + e.MarginBounds.Right - 80, YPos)
    288. YPos = YPos - Zeile * 1.2
    289. YPosEnd = YPos + 9 * Zeile
    290. e.Graphics.DrawLine(BlackPen, 220, YPos, 220, YPosEnd)
    291. e.Graphics.DrawLine(BlackPen, 380, YPos, 380, YPosEnd)
    292. e.Graphics.DrawLine(BlackPen, 540, YPos, 540, YPosEnd)
    293. YPos = YPos + Zeile * 0.5
    294. For J = 0 To 5
    295. Ausgabe = Space(70)
    296. ' Ausgabe 1.Spalte
    297. POS = 11 - Len(PRU(J))
    298. Mid(Ausgabe, POS, Len(PRU(J))) = PRU(J)
    299. POS = 18 - Len(XF(J))
    300. Mid(Ausgabe, POS, Len(XF(J))) = XF(J)
    301. ' Ausgabe 2.Spalte
    302. POS = 28 - Len(PRU(J + 6))
    303. Mid(Ausgabe, POS, Len(PRU(J + 6))) = PRU(J + 6)
    304. POS = 35 - Len(XF(J + 6))
    305. Mid(Ausgabe, POS, Len(XF(J + 6))) = XF(J + 6)
    306. ' Ausgabe 3.Spalte
    307. POS = 45 - Len(PRU(J + 12))
    308. Mid(Ausgabe, POS, Len(PRU(J + 12))) = PRU(J + 12)
    309. POS = 52 - Len(XF(J + 12))
    310. Mid(Ausgabe, POS, Len(XF(J + 12))) = XF(J + 12)
    311. If J + 18 > 21 Then GoTo FormFehler
    312. ' Ausgabe 4.Spalte
    313. POS = 62 - Len(PRU(J + 18))
    314. Mid(Ausgabe, POS, Len(PRU(J + 18))) = PRU(J + 18)
    315. POS = 69 - Len(XF(J + 18))
    316. Mid(Ausgabe, POS, Len(XF(J + 18))) = XF(J + 18)
    317. FormFehler:
    318. Ausgabe = Ausgabe
    319. YPos = YPos + Zeile * 1.2
    320. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    321. Next J
    322. Ausgabe = Space(35)
    323. Länge = Len(FF)
    324. Mid(Ausgabe, 17, Länge + 1) = FF & "µ"
    325. Teil = "SUMMEN-FEHLER"
    326. Mid(Ausgabe, 2, Len(Teil)) = Teil
    327. Ausgabe = Ausgabe
    328. YPos = YPos + Zeile * 1.5
    329. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    330. End If
    331. 'Kantenbruch-Durchmesser *************************************************************************************************************************************************
    332. If frmEvo_S1.Check3.CheckState = 1 Then
    333. Ausgabe = Space(50)
    334. Mid(Ausgabe, 2, 25) = "KANTENBRUCH-DURCHMESSER :"
    335. YPos = YPos + Zeile * 1.5
    336. e.Graphics.DrawString(String.Format(Ausgabe), New Font(FontDrucker, FontStyle.Bold), Brushes.Black, New Point(XPos, YPos))
    337. Ausgabe = Space(50)
    338. Mid(Ausgabe, 2, 25) = "-------------------------"
    339. YPos = YPos + Zeile * 0.6
    340. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    341. Wert = LN
    342. Teil = "LÄNGSNUTENGRUND......."
    343. Zusammenstellen()
    344. Ausgabe1 = Ausgabe
    345. Wert = BD
    346. Teil = "BEZUGSDURCHMESSER....."
    347. Zusammenstellen()
    348. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    349. YPos = YPos + Zeile
    350. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    351. Wert = KB
    352. Teil = "KANTENBRUCH-BREITE...."
    353. Zusammenstellen()
    354. Ausgabe1 = Ausgabe
    355. Wert = KW
    356. Teil = "KANTENBRUCH-WINKEL...."
    357. Zusammenstellen()
    358. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    359. YPos = YPos + Zeile
    360. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    361. Wert = KD
    362. Teil = "KANTENBRUCH-DURCHM...."
    363. Zusammenstellen()
    364. Ausgabe1 = Ausgabe
    365. Wert = IK
    366. Teil = "SPITZE-INNEN KANTENBR."
    367. Zusammenstellen()
    368. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    369. YPos = YPos + Zeile * 2
    370. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    371. Wert = LK
    372. Teil = "LX KANTENBRUCH-DURCHM."
    373. Zusammenstellen()
    374. Ausgabe1 = Ausgabe
    375. Wert = LL
    376. Teil = "LX LÄNGSNUTENGRUND...."
    377. Zusammenstellen()
    378. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    379. YPos = YPos + Zeile
    380. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    381. Wert = BN
    382. Teil = "SX LÄNGSNUTENGRUND...."
    383. Zusammenstellen()
    384. Ausgabe1 = Ausgabe
    385. Wert = SK
    386. Teil = "STOLLENBREITE........."
    387. Zusammenstellen()
    388. Ausgabe = Ausgabe1 & Space(7) & Ausgabe
    389. YPos = YPos + Zeile
    390. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    391. Wert = VV
    392. Teil = "VERTIKAL-VERFAHREN...."
    393. Zusammenstellen()
    394. Ausgabe = Ausgabe
    395. YPos = YPos + Zeile
    396. e.Graphics.DrawString(String.Format(Ausgabe), FontDrucker, Brushes.Black, New Point(XPos, YPos))
    397. End If
    398. und soweiter....
    399. End Sub


    VB.NET-Quellcode

    1. Private Sub PrintDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
    2. Index = 0 ' Startindex initialisieren
    3. End Sub


    Spoiler gesetzt und Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [* Neues Thema] klickt. ~VaporiZed

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

    Du musst Dir selber ausrechnen, wann ein Seitenwechsel erfolgen muss. Ein Beispiel: Du hast 500 Zeilen. Nach 80 Zeilen weißt Du durch Berechnung, dass die Seite voll ist. Dann setzt Du im PrintPage-EventHandler e.HasMorePages auf True, erhöhst Index um 1 und verlässt die Prozedur. Danach wird automatisch wieder der PrintPage-EventHandler aufgerufen. Damit auf der nächsten Seite nicht wieder das gleiche steht, musst Du also die PrintPage-EventHandler-Prozedur so gestalten, dass Index-abhängig gedruckt wird. Also mit If Index = 0 Then oder Select Case Index o.ä. arbeiten.

    ##########

    Ich würde sowas zu gerne automatisieren, weil das von Dir genannte Problem ein Dauerbrenner ist. Die Sache ist nur: das geht nicht. Code wird grundsätzlich von oben nach unten abgearbeitet. Aber der Druckdokumenterstellungscode kann eben dafür sogen, dass erst ganz unten was auf's Dokument geschrieben wird, dann irgendwo am linken Rand. Dann ein Bild im Hintergrund, dann Standardtext und dann noch die Kopfzeile. Dementsprechend kann nicht automatisch erkannt werden, wann die Seite für den Coder/User voll ist. Und somit ist ein automatischer Seitenwechsel nicht möglich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Ja sorry... das habe ich leider zu spät bemerkt. Danke für's verschieben.

    Ok... so hab ich mir das schon gedacht. Das Problem ist wie Du sagst, ich weiß zwar wieviel gedruckt wird, aber wo setze ich das dann auf True? Ich drucke ja immer Blöcke die der User zu beginn seiner Berechnung auswählt. Müßte ich dann eigentlich vor jedem Block prüfen ob er noch paßt und wenn nicht dann dort den Eventhandler auf True setzen?

    Dachte es genügt wenn ich zu beginn bereits sage es gibt zwei Seiten und gebe an wo die erste endet und die zweite beginnt....

    JLH schrieb:

    dann dort den Eventhandler auf True setzen
    Ein EventHandler ist eine Methode ohne Rückgabewert, bei dessen Kopf am Ende steht: Handles …. Daher kannst Du einen EventHandler nicht auf True setzen. Du kannst nur ein Teil eines Parameters des EventHandlers auf True setzen. Der Parameter heißt e, ist vom Typ Drawing.Printing.PrintPageEventArgs und den Teil von e, den Du auf True setzen kannst, heißt HasMorePages. Also lautet die Codezeile e.HasMorePages = True.

    Beschreib mal, wo die erste Seite endet. Woran machst Du das fest?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich wollte das ganze "PrintPage-EventHandler e.HasMorePages auf True" abkürzen....

    Ich weiß, daß ich 1100 "Einheiten" drucken kann. 13 Einheiten ist eine Zeile. Ich kenne die Anzahl der Einheiten die jedes Modul hat. Hatte als erste Idee vor dem Aufbereiten des Moduls zu checken wo YPos jetzt ist und ob YPos+Bedarf die 1000 überschreitet. Wenn ja dann neue Seite....
    Klingt doch gut! Dann schreib genau das. Und dann, wenn das Seitenende erreicht ist, merke Dir, bis zu welcher Einheit Du gekommen bist und fang beim nächsten Aufruf dort quasi wieder an. Also im Prinzip:

    VB.NET-Quellcode

    1. Private Startwert As Integer = 0
    2. '[…]
    3. Private Sub PrintDocument1_PrintPage(sender As Object, e As Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    4. For i = Startwert To AnzahlAllerEinheiten
    5. 'hier Dein Druckcode (e.Graphics.DrawString und so)
    6. If SeitenendeErreicht Then e.HasMorePages = True: Startwert = i + 1: Exit For
    7. Next
    8. End Sub
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @JLH Schau mal hier rein: Drucken mehrseitiger Dokumente
    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!

    JLH schrieb:

    Ich habe mir das Tutorial zum drucken mehrere Seiten durchgelesen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @JLH Exerziere den Code in Post #1 durch mit den 3 Kreisen auf 3 Seiten.
    Verstehe jede Zeile oder frage zu dem, was Du nicht verstehst.
    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!

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

    So... habe etwas wenig Zeit gehabt aber die Lösung von VaporiZed war perfekt. Läuft mit Schleife und Ermittlung des Bedarfs an Zeilen.
    Kann mir vielleicht jemand sagen warum das Druckvorschau Fenster immer klein angezeigt wird? Kann man das gleich größer darstellen lassen?
    Da musst Du konkret werden, am besten mit Screenshots vom Soll- und Ist-Zustand. Bilder kannst Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten.
    Spekulatius am Vormittag: Das PrintPreviewControl (PPC) auf die richtige Größe stellen und vor/bei Erzeugen der Vorschau die PPC-Eiogenschaft AutoZoom nochmal manuell auf True setzen, damit die Vorschau sich auf die Größe des PPCs anpasst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    JLH schrieb:

    Kann man das gleich größer darstellen lassen?
    Du kannst die Größe des Dialoges vorgeben oder ihn als Vollbild laufen lassen, mach das vor der Zeile .ShowDialog().
    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!
    Anbei ist und soll. Wenn gedruckt wird öffnet sich immer zuerst die Druckvorschau in klein. Hätte das gerne in groß.
    Bilder
    • Anmerkung 2021-07-07 100031.jpg

      35,6 kB, 402×332, 33 mal angesehen
    • Anmerkung 2021-07-07 100740.jpg

      117,14 kB, 2.560×1.410, 35 mal angesehen
    @JLH Poste mal den Code, mit dem Du die Druckvorschau öffnest.
    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!
    @JLH

    RodFromGermany schrieb:

    Du kannst die Größe des Dialoges vorgeben oder ihn als Vollbild laufen lassen, mach das vor der Zeile .ShowDialog().

    VB.NET-Quellcode

    1. Using dlg As New PrintPreviewDialog
    2. Me.PrintDocument1.DocumentName = "Evolvente" ' Arbeitstitel
    3. dlg.Document = Me.PrintDocument1
    4. dlg.WindowState = FormWindowState.Maximized ' der hier
    5. dlg.ShowDialog()
    6. 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!

    VB.NET-Quellcode

    1. Using dlg As New PrintPreviewDialog
    2. Me.PrintDocument1.DocumentName = "Evolvente" ' Arbeitstitel
    3. dlg.PrintPreviewControl.AutoZoom = True
    4. dlg.PrintPreviewControl.Zoom = 1
    5. dlg.WindowState = FormWindowState.Maximized ' der hier
    6. dlg.Document = Me.PrintDocument1
    7. dlg.ShowDialog()
    8. End Using


    Danke, der hat noch gefehlt.