Autor Beitrag
Rock O´Brian
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 14.04.20 10:02 
Hallo zusammen,
ich habe eine Frage:

ich arbeite mit VisualStudio 2019, WindowsForm, C#

eine Textbox beinhaltet 6 DIN A4 Seiten Text, die ich zuerst auf Bildschirm, dann auf Laserdrucker ausdrucken möchte, mit PreviewDialog
ich habe es bisher nur geschafft, die erste Seite auf Bildschirm und auf Laserdrucker zu drucken, aber wie geht es wenn mehrere Seiten zu drucken sind ?

dieser Code funktioniert nur auf Bildschirm, auf Drucker gibt es nur ein weißes Blatt, warum ?
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:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EHP_Bauprogramm_V4._5.Menu
{
    public partial class Inhaltsverzeichnis : Form
    {
        public Inhaltsverzeichnis()
        {
            InitializeComponent();
        }

        private void AbbrechenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        int line = 0;
        private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //e.Graphics.DrawString("Inhaltsverzeichnis", new Font("Times New Roman", 12, FontStyle.Bold), Brushes.Black, new Point(50, 50));
            //e.Graphics.DrawString(Tbx_Suchwort.Text, new Font("Times New Roman", 10, FontStyle.Regular), Brushes.Black, new Point(50, 110));
            
            {
                e.HasMorePages = false;
                Font f = new Font("Arial"10, FontStyle.Regular);
                int currentHeight = 0;
                for (;line <Tbx_Suchwort.Lines.Count();line +=1)
                {
                    e.Graphics.DrawString(Tbx_Suchwort.Lines [line], f, Brushes.Black, 50, currentHeight+115);
                    currentHeight += f.Height;
                    if (currentHeight >= e.PageBounds.Height - 230)
                    {
                        e.HasMorePages = true;
                        break;
                    }
                }                
            }
        }

        private void DruckenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            printPreviewDialog1.Document = printDocument1;
            if (printPreviewDialog1.ShowDialog() == DialogResult.OK)
            {
                printDocument1.Print();
            }
        }
    }
}

Bitte kann mir jemand auf einfache Weise einen Code sagen, der mehr als eine Seite Text druckt ?

Vielen Dank

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Titel geändert (deutschen Text hinzugefügt).
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 14.04.20 12:12 
Hallo und :welcome:,

du solltest line vor jedem Druck wieder auf 0 zurücksetzen (da sonst die Schleife niemals mehr durchlaufen wird): dafür gibt es das PrintDocument.BeginPrint-Ereignis.
Generell sollte dein Code mit HasMorePage aber so funktionieren - prüfe doch mal mit dem Debugger, ob die Abfrage passend ausgeführt wird.

PS: GDI-Objekte (wie z.B. Font) müssen wieder per Dispose() (oder besser noch mittels der using (...)-Anweisung) freigegeben werden.

Für diesen Beitrag haben gedankt: Rock O´Brian
Rock O´Brian Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 14.04.20 12:52 
Vielen Dank für den Tipp

da ich "blutiger Anfänger" bin, (ich habe diesen Code aus Youtube einfach abgetippt) habe ich keine Ahnung, wo ich "line auf Null" setzen muss.

Bitte, bitte kannst du mir deine Verbesserungen in meinen Code einfügen ?

vielen Dank

Moderiert von user profile iconTh69: Beiträge zusammengefasst

und wo kann ich dir ein "Dankeschön" anklicken ?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 14.04.20 12:59 
Ich habe dir mal Beispielcode rausgesucht: Provide printing and print previews with advanced features for Windows Forms applications in C# (du mußt dann nur, so wie du es auch für die PrintPage-Methode gemacht hast, diese Ereignismethode im Designer abonnieren (= zuweisen)).

PS: Bei jedem Beitrag gibt es den "thx"-Button zum Anklicken.