Oppure

Loading
25/03/09 21:36
lorenzo
mlSEND è un listbox

private void bPRINT_Click(object sender, EventArgs e)
        {

            if (printDialog1.ShowDialog() == DialogResult.OK)
            {
                printDialog1.Document = printDocument1;
                printDocument1.PrinterSettings = printDialog1.PrinterSettings;
                ls = mlSEND.Items;
                printDocument1.Print();
            }
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.PageUnit = GraphicsUnit.Pixel;
            Font font = new System.Drawing.Font("Times New Roman", 12);
            Single CharHeight = font.GetHeight(e.Graphics);
            float TotalLines = e.MarginBounds.Height / CharHeight;
            Int16 LineIndex  = 1;
            string Line;
            float Y = e.MarginBounds.Top;

            e.Graphics.RenderingOrigin = new Point(e.MarginBounds.Left, e.MarginBounds.Top);
            Line = this.Text + Environment.NewLine + Environment.NewLine;
            e.Graphics.DrawString(Line, font, Brushes.Black,
                    e.MarginBounds.Left, Y);
            Y += CharHeight;
            LineIndex += 2;
            foreach (string ob in ls)
            {
                Line = ob;
                e.Graphics.DrawString(Line, font, Brushes.Black,
                    e.MarginBounds.Left, Y);
                Y += CharHeight;
                LineIndex += 1;
            }
        }


la stampa mi si ferma alla prima pagina quando dovrebbero essercene almeno tre...come posso fare per stamparne di più?
Ultima modifica effettuata da lorenzo 25/03/09 21:36
aaa
25/03/09 22:48
andrea.b89
Il fatto è che quando devi stampare il programma in modo logico stampa una pagina per volta, o per meglio dire stampa il contenuto di un pagina alla volta.

Per far si che il programma stampi N pagine, nel tuo caso 3, bisogno che gli venga segnalato se ci sono ulteriori pagine da stampare oltre a quella in fase di stampa.
Per fare ciò devi settare a True una proprietà del PrintPageEventArgs chiamata HasMorePages, come nel seguente esempio.

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.HasMorePages = true;
        }


Ovvio che in questo modo però stampi pagine all'infinito.
Per gestire il numero di pagine potresti fare un contatore nel seguente modo

int numPagine = 3; //numero arbitrario
int pagStampate = 0;
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            pagStampate++;
            if (pagStampate < numPagine)
                e.HasMorePages = true;
        }


A questo punto devi gestire il contenuto da stampare.
Metti di avere una listbox con N elementi da stampare.
Di default decidi di stampare 30 elementi per pagina.


int numRigheTotali;
        int numRighePerPagina = 30;
        int numPagineStampate;
        int numPagineTotali;

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            int tmpRighe = numPagineStampate == numPagineTotali - 1 ? numRigheTotali % numRighePerPagina : numRighePerPagina;
            string riga;
            int lineIndex = numPagineStampate * numRighePerPagina;
            for (int i = 0; i < tmpRighe; i++)
            {
                riga = listBox1.Items[lineIndex + i].ToString();
                e.Graphics.DrawString(riga , new Font("Times New Roman", 12),
                    Brushes.Black, new PointF(e.PageBounds.X, 15 * i));
            }

            numPagineStampate++;
            if (numPagineStampate < numPagineTotali)
                e.HasMorePages = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            printDialog1.Document = printDocument1;
            if (printDialog1.ShowDialog() == DialogResult.OK)
            {
                numRigheTotali = listBox1.Items.Count;
                numPagineTotali = numRigheTotali / numRighePerPagina + 1;
                printDocument1.Print();
            }
        }


Nel form ho posizionato una listBox ed un button lasciando i nomi di default per evitare fraintendimenti.

Comunque questo è quanto.
Vedi se riesci ad adattarlo al tuo caso, e se hai ancora problemi vedrò di aiutari.

Spero di essere stato chiaro e di aiuto :k:
aaa
26/03/09 12:48
lorenzo
grazie ho capito il concetto....adesso lo adatterò al mio caso
aaa