Mehrere Charts auf ein A4 Blatt drucken.

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

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.

    Mehrere Charts auf ein A4 Blatt drucken.

    Guten morgen
    Im nachfolgenden Code werden die Daten aus XML Dateien mittels Select/Case in einem Chart angezeigt. Über die Druckfunktion kann ich nun immer das aktl. Chart ausdrucken.
    Nun meine Frage:
    Wie bekomme ich es hin, alle Select-Bereiche automatisch durchlaufen zu lassen um diese dann alle auf einem Blatt auszudrucken.

    Für Hilfe wäre ich Dankbar.



    Spoiler anzeigen

    Die Ausgabe der Daten mittels Select/Case

    VB.NET-Quellcode

    1. Private Sub LoadWeatherDataAndChart()
    2. ReadDataFromXml()
    3. 'Datum im Format "yyyy-MM" aus dem DTPicker auslesen
    4. Dim selectedDate As String = dtp_Show.Value.ToString("yyyy-MM")
    5. 'Pfad zur ausgewählten XML-Datei erstellen
    6. Dim xmlFilePath As String = Path.Combine(NewDatafolder, selectedDate & ".xml")
    7. 'Prüfen, ob die ausgewählte XML-Datei existiert
    8. If File.Exists(xmlFilePath) Then
    9. Dim weatherDataList As List(Of WeatherDataDiag) = ReadWeatherDataFromXml(xmlFilePath)
    10. ' Chart-Serie erstellen, wenn ein Datentyp ausgewählt wurde
    11. If cmb_Wettertyp.SelectedItem IsNot Nothing Then
    12. ' Chart-Serie erstellen
    13. Dim chartSeries As New Series(cmb_Wettertyp.SelectedItem.ToString())
    14. Dim chartSeries1 As Series = Nothing ' Neue Serie erstellen
    15. Select Case cmb_Wettertyp.SelectedItem.ToString()
    16. Case "Regen"
    17. lblEinheiten.Text = "Regen: Niederschläge in mm"
    18. Chart1.ChartAreas(0).AxisX.Minimum = Double.NaN
    19. Chart1.ChartAreas(0).AxisX.Maximum = Double.NaN
    20. Chart1.ChartAreas(0).AxisY.Minimum = Double.NaN
    21. Chart1.ChartAreas(0).AxisY.Maximum = Double.NaN
    22. chartSeries.Color = Color.Blue
    23. chartSeries.ChartType = SeriesChartType.Column
    24. For Each weatherData As WeatherDataDiag In weatherDataList
    25. chartSeries.Points.AddXY(weatherData.Datum, weatherData.RegenTag)
    26. Next
    27. Case "SchneeTag"
    28. lblEinheiten.Text = "Schnee: Niederschläge in cm"
    29. Chart1.ChartAreas(0).AxisX.Minimum = Double.NaN
    30. Chart1.ChartAreas(0).AxisX.Maximum = Double.NaN
    31. Chart1.ChartAreas(0).AxisY.Minimum = Double.NaN
    32. Chart1.ChartAreas(0).AxisY.Maximum = Double.NaN
    33. chartSeries.Color = Color.DarkSlateBlue
    34. chartSeries.ChartType = SeriesChartType.Column
    35. chartSeries1 = New Series("SchneeNacht") ' Neue Serie initialisieren
    36. chartSeries1.Color = Color.Magenta
    37. chartSeries1.ChartType = SeriesChartType.Column
    38. For Each weatherData As WeatherDataDiag In weatherDataList
    39. chartSeries.Points.AddXY(weatherData.Datum, weatherData.SchneeTag)
    40. chartSeries1.Points.AddXY(weatherData.Datum, weatherData.SchneeNacht)
    41. Next
    42. Case "TempTag"
    43. lblEinheiten.Text = "Temperaturen in °Celsius"
    44. Chart1.ChartAreas(0).AxisX.Minimum = Double.NaN
    45. Chart1.ChartAreas(0).AxisX.Maximum = Double.NaN
    46. Chart1.ChartAreas(0).AxisY.Minimum = Double.NaN
    47. Chart1.ChartAreas(0).AxisY.Maximum = Double.NaN
    48. chartSeries.Color = Color.Maroon
    49. chartSeries.ChartType = SeriesChartType.Line
    50. chartSeries1 = New Series("TempNacht") ' Neue Serie initialisieren
    51. chartSeries1.Color = Color.DarkGreen
    52. chartSeries1.ChartType = SeriesChartType.Line
    53. For Each weatherData As WeatherDataDiag In weatherDataList
    54. chartSeries.Points.AddXY(weatherData.Datum, weatherData.TempTag)
    55. chartSeries1.Points.AddXY(weatherData.Datum, weatherData.TempNacht)
    56. Next
    57. Case "WindTag"
    58. lblEinheiten.Text = "Windstärke nach Beaufort-Skala"
    59. Chart1.ChartAreas(0).AxisX.Minimum = Double.NaN
    60. Chart1.ChartAreas(0).AxisX.Maximum = Double.NaN
    61. Chart1.ChartAreas(0).AxisY.Minimum = Double.NaN
    62. Chart1.ChartAreas(0).AxisY.Maximum = Double.NaN
    63. chartSeries.Color = Color.MediumVioletRed
    64. chartSeries.ChartType = SeriesChartType.Line
    65. chartSeries1 = New Series("WindNacht") ' Neue Serie initialisieren
    66. chartSeries1.Color = Color.DarkSlateGray
    67. chartSeries1.ChartType = SeriesChartType.Line
    68. For Each weatherData As WeatherDataDiag In weatherDataList
    69. chartSeries.Points.AddXY(weatherData.Datum, weatherData.WindTag)
    70. chartSeries1.Points.AddXY(weatherData.Datum, weatherData.WindNacht)
    71. Next
    72. Case "LuftfmaxTag"
    73. lblEinheiten.Text = "Luftfeuchtigkeit in %"
    74. Chart1.ChartAreas(0).AxisX.Minimum = Double.NaN
    75. Chart1.ChartAreas(0).AxisX.Maximum = Double.NaN
    76. Chart1.ChartAreas(0).AxisY.Minimum = Double.NaN
    77. Chart1.ChartAreas(0).AxisY.Maximum = Double.NaN
    78. chartSeries.Color = Color.DeepPink
    79. chartSeries.ChartType = SeriesChartType.Line
    80. chartSeries1 = New Series("LuftfminTag") ' Neue Serie initialisieren
    81. chartSeries1.Color = Color.LimeGreen
    82. chartSeries1.ChartType = SeriesChartType.Line
    83. For Each weatherData As WeatherDataDiag In weatherDataList
    84. chartSeries.Points.AddXY(weatherData.Datum, weatherData.LuftfminTag)
    85. chartSeries1.Points.AddXY(weatherData.Datum, weatherData.LuftfmaxTag)
    86. Next
    87. Case "LuftfmaxNacht"
    88. lblEinheiten.Text = "Luftfeuchtigkeit in %"
    89. Chart1.ChartAreas(0).AxisX.Minimum = Double.NaN
    90. Chart1.ChartAreas(0).AxisX.Maximum = Double.NaN
    91. Chart1.ChartAreas(0).AxisY.Minimum = Double.NaN
    92. Chart1.ChartAreas(0).AxisY.Maximum = Double.NaN
    93. chartSeries.Color = Color.DarkGreen
    94. chartSeries.ChartType = SeriesChartType.Line
    95. chartSeries1 = New Series("LuftfminNacht") ' Neue Serie initialisieren
    96. chartSeries1.Color = Color.OrangeRed
    97. chartSeries1.ChartType = SeriesChartType.Line
    98. For Each weatherData As WeatherDataDiag In weatherDataList
    99. chartSeries.Points.AddXY(weatherData.Datum, weatherData.LuftfminNacht)
    100. chartSeries1.Points.AddXY(weatherData.Datum, weatherData.LuftfmaxNacht)
    101. Next
    102. End Select
    103. ' Chart mit den Serien füllen
    104. Dim selectedDatein As Date = dtp_Show.Value
    105. Dim formattedDate As String = selectedDatein.ToString("MMMM-yyyy")
    106. Chart1.Series.Clear()
    107. Chart1.Titles.Clear()
    108. Chart1.ChartAreas.Clear() ' Alle ChartAreas löschen
    109. Chart1.Titles.Add("Wetterdaten für den Monat : " & formattedDate)
    110. ' Neue ChartArea initialisieren
    111. Dim chartArea1 As New ChartArea()
    112. chartArea1.AxisX.IntervalType = DateTimeIntervalType.Days ' Achsenintervalltyp auf Tage setzen
    113. chartArea1.AxisX.Interval = 1 ' Achsenintervall auf 1 Tag setzen
    114. chartArea1.AxisX.LabelStyle.Format = "dd.MM" ' Datumsformat für die X-Achse setzen
    115. ' chartArea1.AxisY.Title = cmb_Wettertyp.SelectedItem.ToString()
    116. Chart1.ChartAreas.Add(chartArea1) ' ChartArea hinzufügen
    117. ' Chart mit den Serien füllen
    118. Chart1.Series.Add(chartSeries)
    119. If chartSeries1 IsNot Nothing Then ' Sicherstellen, dass die neue Serie initialisiert wurde
    120. Chart1.Series.Add(chartSeries1)
    121. End If
    122. End If
    123. Else
    124. MessageBox.Show("Die ausgewählte Datei wurde nicht gefunden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    125. End If
    126. End Sub


    Das ausdrucken eines Chart

    VB.NET-Quellcode

    1. #Region "Drucken"
    2. Private Sub chkPrint_CheckedChanged(sender As Object, e As EventArgs) Handles chkPrint.CheckedChanged
    3. AktualisierePaper()
    4. End Sub
    5. Private Sub AktualisierePaper()
    6. If chkPrint.Checked Then
    7. Paperformat = True
    8. Else
    9. Paperformat = False
    10. End If
    11. End Sub
    12. Private Sub PrintChartButton_Click(sender As Object, e As EventArgs) Handles btnPrint.Click
    13. ' Create a PrintDocument object
    14. Dim pd As New Printing.PrintDocument()
    15. ' Set the printer settings
    16. pd.DefaultPageSettings.Landscape = Paperformat ' Set the page orientation to landscape
    17. pd.DefaultPageSettings.PaperSize = New PaperSize("A4", 827, 1169) ' Set the paper size to A4
    18. ' Add an event handler to print the chart
    19. AddHandler pd.PrintPage, AddressOf PrintChart
    20. ' Print the chart
    21. pd.Print()
    22. End Sub
    23. Private Sub PrintChart(sender As Object, e As Printing.PrintPageEventArgs)
    24. ' Draw the chart on a bitmap image
    25. Dim chartImage As New Bitmap(Chart1.Width, Chart1.Height)
    26. Chart1.DrawToBitmap(chartImage, New Rectangle(0, 0, Chart1.Width, Chart1.Height))
    27. ' Calculate the dimensions of the chart on the printed page
    28. Dim chartWidth As Integer = e.MarginBounds.Width
    29. Dim chartHeight As Integer = CInt(chartImage.Height * chartWidth / chartImage.Width)
    30. ' Draw the chart on the printed page
    31. e.Graphics.DrawImage(chartImage, e.MarginBounds.Left, e.MarginBounds.Top, chartWidth, chartHeight)
    32. End Sub
    33. #End Region


    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Das einfachste, ggf. aber nicht eleganteste: In einer Schleife alle ComboBox-Werte nacheinander auswählen, sodass das Chart entsprechend neu gezeichnet wird (nach dem Selektieren dem Programm eine kleine Denkpause lassen (z.B. mit dem bei mir beliebtem Delay-Workaround), sonst geht alles wahrscheinlich zu schnell), dann davon mit der von Dir bereits verwendeten Chart1.DrawToBitmap-Funktion ein Bild machen und dies in einer Variablen speichern (eine List(Of Image) bietet sich an) und dann in der Druckfunktion die List(Of Image) abarbeiten, will heißen: die einzelnen gespeicherten Bilder herholen und positionieren.
    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.
    Hallo
    Also ich hatte schon gestern so eine Idee mit PicBoxen welche auf ein neues Form gezeichnet werden sollten, bin aber daran gescheitert.
    Bin froh das ich es soweit mit dem "Drucken" geschafft habe.

    Ich bin nun soweit das zwar die Chart-Überschrift auf meinem Blatt erscheint, aber keins der Diagramme.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' ganz am anfang des Codes
    2. Private chartImages As New List(Of Image)

    Nur der untere Teil vom vorherigen Code:

    VB.NET-Quellcode

    1. End Select
    2. ' Chart mit den Serien füllen
    3. Dim selectedDatein As Date = dtp_Show.Value
    4. Dim formattedDate As String = selectedDatein.ToString("MMMM-yyyy")
    5. Chart1.Series.Clear()
    6. Chart1.Titles.Clear()
    7. Chart1.ChartAreas.Clear() ' Alle ChartAreas löschen
    8. Chart1.Titles.Add("Wetterdaten für den Monat : " & formattedDate)
    9. ' Neue ChartArea initialisieren
    10. Dim chartArea1 As New ChartArea()
    11. chartArea1.AxisX.IntervalType = DateTimeIntervalType.Days ' Achsenintervalltyp auf Tage setzen
    12. chartArea1.AxisX.Interval = 1 ' Achsenintervall auf 1 Tag setzen
    13. chartArea1.AxisX.LabelStyle.Format = "dd.MM" ' Datumsformat für die X-Achse setzen
    14. ' chartArea1.AxisY.Title = cmb_Wettertyp.SelectedItem.ToString()
    15. Chart1.ChartAreas.Add(chartArea1) ' ChartArea hinzufügen
    16. ' Chart mit den Serien füllen
    17. Chart1.Series.Add(chartSeries)
    18. If chartSeries1 IsNot Nothing Then ' Sicherstellen, dass die neue Serie initialisiert wurde
    19. Chart1.Series.Add(chartSeries1)
    20. End If
    21. End If
    22. ' Schleife durch alle ComboBox-Werte
    23. For Each item As Object In cmb_Wettertyp.Items
    24. ' ComboBox-Wert auswählen
    25. cmb_Wettertyp.SelectedItem = item
    26. ' Eine kleine Pause einlegen, damit das Chart neu gezeichnet wird
    27. System.Threading.Thread.Sleep(1500)
    28. ' Chart als Bitmap zeichnen und in der Liste speichern
    29. Dim chartBitmap As New Bitmap(Chart1.Width, Chart1.Height)
    30. Chart1.DrawToBitmap(chartBitmap, Chart1.ClientRectangle)
    31. chartImages.Add(chartBitmap)
    32. Next
    33. Else
    34. MessageBox.Show("Die ausgewählte Datei wurde nicht gefunden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    35. End If

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @Amelie Schau mal hier rein, wie Bilder (am Beispiel von Kreisen) gedruckt werden:
    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!

    Amelie schrieb:

    ' Eine kleine Pause einlegen, damit das Chart neu gezeichnet wird
    System.Threading.Thread.Sleep(1500)
    Der Kommentar lügt. System.Threading.Thread.Sleep = "Das Programm im kompletten Umfang anhalten!"
    Mein verlinkter Delay-Workaround hingegen bedeutet: Die Methode soll vorerst pausiert werden, damit der Computer die Chance hat, andere Aufgabe, wie z.B. das Zeichnen der Benutzeroberfläche inkl. Chart zu ermöglichen, bevor es weitergeht.
    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.

    VaporiZed schrieb:

    Der Kommentar lügt. System.Threading.Thread.Sleep = "Das Programm im kompletten Umfang anhalten!"


    Das ist auch nur die halbe Wahrheit. Ist wird nicht unbedingt das ganze Programm angehalten. Nur der Thread in dem diese Funktion gecallt wird. Klar kann man in diesem Fall davon ausgehen, das der UI Thread betroffen ist und keine anderen laufen, aber manch jemand liest das und denkt dann so kann ich also das ganze Programm "pausieren".
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Da hast Du recht, da hab ich Blödsinn geschrieben.
    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.
    Also bei meinem letzten Code ist es so, das sich das Programm nun Aufhängt.
    Ich meine Eingangspost schrieb ich ja, das dass drucken eines Charts funktioniert.
    Leider ist das eine Papierverschwendung. Deswegen die Überlegung, mehrere Charts auf ein Blatt zu drucken.
    Komme mit dem durchlaufen der Select/Cases usw nicht vorran.

    Beim Awati/Sync müsste ich nun meinen bestehenden Code wieder komplett umschreiebn....
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Also bei meinem letzten Code ist es so, das sich das Programm nun Aufhängt.
    wie quasi geschrieben: System.Threading.Thread.Sleep = "Den GUI-Thread im kompletten Umfang anhalten!" Das Programm stoppt für 1,5 Sekunden, ohne dass Du einen Vorteil hast.

    Amelie schrieb:

    Beim Awati/Sync müsste ich nun meinen bestehenden Code wieder komplett umschreiebn....
    Nee, eigentlich nicht. Du musst wahrscheinlich nur im Methodenkopf an richtiger Stelle das Async hinschreiben und statt dem System.Threading.Thread.Sleep(1500) eben das System.Threading.Tasks.Task.Delay(1500). Ob 1500 der richtige Wert ist, musst Du ausprobieren, vielleicht reicht auch schon 1.
    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.
    @Amelie Poste mal ein vollständiges laufendes und bereinigtes Projekt.
    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

    Anbei der bereinigte Code und mit DemoDaten.
    Bitte nicht gleich meinen Kopf abreissen. :D Hab mir echt mühe gegeben.

    ----EDIT----
    Überarbeite den Code!
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    Bitte immer vorher selber in nem neuen Ordner wieder auspacken und testen. Die ApSet.xml fehlt.
    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.
    frmWeather_Load() -> DoSomething() -> ReadDatafolderFromXml() -> XDocument.Load(_datafolder)
    Bilder
    • Error.png

      37,77 kB, 818×294, 158 mal angesehen
    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.

    Amelie schrieb:

    wird doch erstellt
    Beim ersten Start nicht:

    ====
    Gib bekannt, wo die Daten hingehören.
    Wie SOLL denn Dein Ausdruck aussehen?
    Der Inhalt der Form wird ordentlich gedruckt.
    Wenn Du allerdings eine Tabelle drucken willst, schaust Du hier:
    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!

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

    Die Tabelle aus dem DGV und deren Ausdruck ist ja ok.
    Mir geht es um die Charts (Button Diagramm)
    So wie im Bild möchte ich die einzelnen Charts auf einem Blatt haben.
    Im Moment wird jedes Chart auf einem seperaten Blatt gedruckt.

    Wo letztendlich die Daten abgelegt werden, kann man in den Einstellungen festlegen.
    Bilder
    • chart-1.jpg

      168,82 kB, 453×900, 162 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Wo letztendlich die Daten abgelegt werden, kann man in den Einstellungen festlegen.
    Aber nicht beim ersten Aufruf.

    VaporiZed schrieb:

    Bitte immer vorher selber in nem neuen Ordner wieder auspacken und testen.

    Wie komme ich an diese Bilder?
    Bitte eine Gebrauchsanweisung posten.
    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“ ()

    ​Wie komme ich an diese Bilder...


    Programm starten, Menue Diagramme. Dann über die Combobox die verschiedenen Wetter (Regen, Schnee usw) auswählen.
    Nun wird ein Diagramm angezeigt. Diese sollen nun alle auf einem Blatt ausgedruckt werden.

    ​Aber nicht bei ersten Aufruf

    OK da ist noch ein Fehlerim Code den ich dann später noch beseitige.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Diese sollen nun alle auf einem Blatt ausgedruckt werden.
    Da musst Du noch ein paar Hausaufgaben machen.
    Folgender getesteter Code druckt 2 Charts untereinander:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub PrintChart(sender As Object, e As Printing.PrintPageEventArgs)
    2. ' Calculate the dimensions of the chart on the printed page
    3. Dim chartWidth As Integer = e.MarginBounds.Width
    4. For i = 1 To 2
    5. cmb_Wettertyp.SelectedIndex = i
    6. ' Draw the chart on a bitmap image
    7. Using chartImage As New Bitmap(Chart1.Width, Chart1.Height)
    8. Dim chartHeight As Integer = CInt(chartImage.Height * chartWidth / chartImage.Width)
    9. Chart1.DrawToBitmap(chartImage, New Rectangle(0, 0, Chart1.Width, Chart1.Height))
    10. ' Draw the chart on the printed page
    11. e.Graphics.DrawImage(chartImage, e.MarginBounds.Left, e.MarginBounds.Top + (i - 1) * chartHeight, chartWidth, chartHeight)
    12. End Using
    13. Next
    14. End Sub
    Für weitere Charts brauchst Du eine Seitenschaltung.
    Wie das funktioniert findest Du hier:
    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!
    Das erste Ergebnis mit meinem Async-Await-Vorschlag. Codeänderung zum bisherigen Projekt minimal.
    Bilder
    • Result.png

      168,82 kB, 1.291×912, 158 mal angesehen
    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.