Autor Beitrag
Namenlosnameless
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 31.12.11 17:45 
Hallo!

Gleich vorne weg: Wünsch ich dem gesamten Forum einen guten Rutsch!

aber nun zum Problem: Ich muss Teilnehmerlisten ausdrucken lassen!
Dabei muss ich 4 Listen 4x mit geänderter Stationenbezeichnung und Punkterichter ausgeben. => Also 16 A4 Seiten!

Derzeit stehe ich vor dem Problem, dass ich das Ändern der Stationsbezeichnung in einer externen Methode vornehme (ich sehe auch keine andere Möglichkeit), dabei lasse ich eine bool-Valiable mitlaufen die bei der letzten Seite auf false stellt und damit im Print Ereigniss des printDocument die Eigenschaft HasMorePages auf true zu stellen!

Leider springt das Programm dann aber nochmal an den Anfang des PrintEreignisses => das die Stationsbezeichnung und Punkterichter nicht geändert werden sondern einfach nur die gleiche Liste nochmal als Seite angehängt wird!

Mein Code für das ändern des Ricters bisher:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
private void button1_Click(object sender, EventArgs e)
        {
//Zuweisen des Dokuments für Preview!
            printPreviewDialog1.Document = printDocument1;
            //Auslesen der in statischen ContainerClass als Liste gespeicherten Gruppen
            forint counter=0;counter<ContainerClass.Groups.Count;counter++)
            {
//printGr ist die globale Variable, die die Gruppe darstellt, die im Print-Ereigniss behandelt wird!
                printGr = ContainerClass.Groups[counter];
//Aufrufen der Namen für Punkterichter die in der Liste ContainerClass.Judges gespeichert sind
                for (int counter1 = 0; counter < ContainerClass.Judges.Count;counter1++ )
                {
//Zuweisen des aktuellen Richters für die zu bearbeitende Gruppe (Die Klasse Gruppe hat "public string Judge;"
                     printGr.Judge=ContainerClass.Judges[counter1];
                    
//Prüfen ob letzte Seite beim Drucken
                    if (counter1 + 1 == ContainerClass.Judges.Count && counter + 1 == ContainerClass.Groups.Count)
                    {
//hasmorePages ist eine globale Variable für das Print-Event ob noch eine Seite angehängt werden soll
                        hasmorePages = false;
                        printPreviewDialog1.ShowDialog(); //Preview anzeigen
                    }
                    else
                    {
                        hasmorePages = true
                        printDocument1.Print() //Seite hinzufügen! FNKTIONIERT NICHT WIE GEDACHT!!
                    }
                    
                }
            }

            
        }


und hier für das Drucken:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
          
// ZEICHENCODE 
            e.HasMorePages = hasmorePages; // Wenn hier true übergeben wird springt das Programm wieder zum Anfang der printDocument1_PrintPage-Methode!
            
        }


Meine Frage ist nur: Wie schaff ich es, dass obwohl für HasMorePages true übergeben wird, dass das Programm printDocument1_PrintPage verlässt? Weil es ist ziemlich mühsam das Preview für 16 Druckseiten einzeln zu bestätigen... (Für den Fall das es 6 Richter und Gruppen gibt wären es 36 :S )

mfg Christoph

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 31.12.11 18:48 
Du versuchst das hier komplett umgekehrt zum normalen Ablauf. Mir ist gerade nicht so ganz klar warum. :gruebel: Aber so wird das nicht gehen.

Vielleicht einmal zum Verständnis:
Du rufst einmal Print() auf und daraufhin wird innerhalb dieser Methode das Event PrintPage aufgerufen bis du e.HasMorePages auf false setzt. Dementsprechend muss die Logik auch in diesem Event liegen.

Wenn du jetzt immer wieder Print() aufrufst, beginnst du jedesmal einen neuen Druck.

Zu deinem Code:
Wenn ich das richtig sehe, musst du dir nur CurrentGroup und CurrentJudge global in deiner Klasse merken und einmal Print() aufrufen. Dann veränderst du die Variablen innerhalb von PrintPage wie du es in den Schleifen bisher tust.
Das sollte es schon gewesen sein.

Dann funktioniert auch die Preview korrekt, weil du dort auch alle Seiten auf einmal behandelst und in einer Preview zum Blättern anzeigst. ;-)
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 31.12.11 19:09 
jo! Da ist ein Verständnis-Problem vorgelegen!

Ich habs eben genauso auch gelöst!

Danke!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>