Laden...

Drucker druckt nur weisse Blätter

Erstellt von elias12 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.420 Views
E
elias12 Themenstarter:in
7 Beiträge seit 2018
vor 5 Jahren
Drucker druckt nur weisse Blätter

Hallo zusammen

Ich habe ein kleines Programm entwickelt welches u.a Datensätze in einer Listbox (LstAnzeige) anzeigt, was tadellos funktioniert. Nun habe ich zusätzlich noch eine Printerfunktion eingebaut, d.h. beim Klicken auf den Drucken Button sollen die Einträge aus der Listbox auf dem Drucker ausgegeben werden. Doch der druckt nur weisse Blätter was mache ich falsch?
Danke für Eure Hilfe.

die beide Elemente "PrintDialog und PrintDocument" habe ich natürlich ebenfalls eingebunden im Form und bis zum Druckerauswahlfeld klappt alles.. doch dann druckt der Drucker wie gesagt zwar was aus aber nur ne leere Seite.

Muss mich korrigieren: der Drucker druckt rein gar nichts.


public Form1()
        {
            InitializeComponent();

        }
        private StringReader myReader;

        private void Form1_Load(object sender, EventArgs e)
        {

            for (int i = 0; i < 10; i++)
            {
                LstAnzeige.Items.Add("test" + i);

protected void CmdPrint_Click(object sender, EventArgs e)
        {
            // Printer Dialog Feld einblenden wo der User den Drucker auswählen und ggf. anpassen kann
            // Und dann ListBox Einträge printen
           PrintDialog.Document = PrintDocument;
            string strText = "";
            foreach (object x in LstAnzeige.Items)
            {
                strText = strText + x.ToString() + "\n";
            }
            myReader = new StringReader(strText);
            if (PrintDialog.ShowDialog() == DialogResult.OK)
            {
                this.PrintDocument.Print();
            }

        }

        protected void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ev)

        {
            float linesPerPage = 0;
            float yPosition = 0;
            int count = 0;
            float leftMargin = ev.MarginBounds.Left;
            float topMargin = ev.MarginBounds.Top;
            string line = null;
            Font printFont = this.LstAnzeige.Font;
            SolidBrush myBrush = new SolidBrush(Color.White);
            linesPerPage =
                 ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);
            // Iterate over the string using the StringReader, printing each line.
            while (count < linesPerPage && ((line = myReader.ReadLine()) != null))
                yPosition = topMargin + (count * printFont.GetHeight(ev.Graphics));
            ev.Graphics.DrawString(line, printFont,
                myBrush, leftMargin,
                yPosition, new StringFormat());
            count++;

            // If there are more lines, print another page.
            if (line != null)
                ev.HasMorePages = true;
            else
                ev.HasMorePages = false;
            myBrush.Dispose();
        }

2.298 Beiträge seit 2010
vor 5 Jahren

Hast du denn schon einmal mit dem Debugger geschaut was da los ist?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

4.931 Beiträge seit 2008
vor 5 Jahren

Hast du überhaupt die Ereignismethode printDocument1_PrintPage richtig mit dem Ereignis PrintPage verbunden (die Namensgebung printDocument1 vs. PrintDocument deutet eher nicht darauf hin)?

PS: Statt dem myBrush.Dispose() packe den Code besser in eine using(...)-Anweisung.

E
elias12 Themenstarter:in
7 Beiträge seit 2018
vor 5 Jahren

Hallo zusammen

Habe den Fehler gefunden und zwar habe ich in der while Schleife die {} Klammern vergessen daher ist der Loop gar nie gelaufen sprich der Wert war immer null..

Lustigerweise hat der Debugger da nichts angezeigt bzw. ich habe nicht gemerkt dass die Schleife eben falsch ablief

2.298 Beiträge seit 2010
vor 5 Jahren

Dann hast du nicht korrekt mit dem Debugger gearbeitet. - Normalerweise springst du für jeden Schleifenumlauf erneut in den Rumpf. - Nach deiner Beschreibung dürfte das nur einmal passieren und sollte ein starkes Indiz liefern.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |