Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Stampa C#
Forum - C# / VB.NET - Stampa C#

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 22:36
Mercoledì, 25/03/2009
mlSEND è un listbox

Codice sorgente - presumibilmente C# / VB.NET

  1. private void bPRINT_Click(object sender, EventArgs e)
  2.         {
  3.  
  4.             if (printDialog1.ShowDialog() == DialogResult.OK)
  5.             {
  6.                 printDialog1.Document = printDocument1;
  7.                 printDocument1.PrinterSettings = printDialog1.PrinterSettings;
  8.                 ls = mlSEND.Items;
  9.                 printDocument1.Print();
  10.             }
  11.         }
  12.  
  13.         private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
  14.         {
  15.             e.Graphics.PageUnit = GraphicsUnit.Pixel;
  16.             Font font = new System.Drawing.Font("Times New Roman", 12);
  17.             Single CharHeight = font.GetHeight(e.Graphics);
  18.             float TotalLines = e.MarginBounds.Height / CharHeight;
  19.             Int16 LineIndex  = 1;
  20.             string Line;
  21.             float Y = e.MarginBounds.Top;
  22.  
  23.             e.Graphics.RenderingOrigin = new Point(e.MarginBounds.Left, e.MarginBounds.Top);
  24.             Line = this.Text + Environment.NewLine + Environment.NewLine;
  25.             e.Graphics.DrawString(Line, font, Brushes.Black,
  26.                     e.MarginBounds.Left, Y);
  27.             Y += CharHeight;
  28.             LineIndex += 2;
  29.             foreach (string ob in ls)
  30.             {
  31.                 Line = ob;
  32.                 e.Graphics.DrawString(Line, font, Brushes.Black,
  33.                     e.MarginBounds.Left, Y);
  34.                 Y += CharHeight;
  35.                 LineIndex += 1;
  36.             }
  37.         }



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 il 25/03/2009 alle 22:36
PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 23:48
Mercoledì, 25/03/2009
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.

Codice sorgente - presumibilmente C# / VB.NET

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



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

Codice sorgente - presumibilmente C++

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



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.


Codice sorgente - presumibilmente C#

  1. int numRigheTotali;
  2.         int numRighePerPagina = 30;
  3.         int numPagineStampate;
  4.         int numPagineTotali;
  5.  
  6.         private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
  7.         {
  8.             int tmpRighe = numPagineStampate == numPagineTotali - 1 ? numRigheTotali % numRighePerPagina : numRighePerPagina;
  9.             string riga;
  10.             int lineIndex = numPagineStampate * numRighePerPagina;
  11.             for (int i = 0; i < tmpRighe; i++)
  12.             {
  13.                 riga = listBox1.Items[lineIndex + i].ToString();
  14.                 e.Graphics.DrawString(riga , new Font("Times New Roman", 12),
  15.                     Brushes.Black, new PointF(e.PageBounds.X, 15 * i));
  16.             }
  17.  
  18.             numPagineStampate++;
  19.             if (numPagineStampate < numPagineTotali)
  20.                 e.HasMorePages = true;
  21.         }
  22.  
  23.         private void button1_Click(object sender, EventArgs e)
  24.         {
  25.             printDialog1.Document = printDocument1;
  26.             if (printDialog1.ShowDialog() == DialogResult.OK)
  27.             {
  28.                 numRigheTotali = listBox1.Items.Count;
  29.                 numPagineTotali = numRigheTotali / numRighePerPagina + 1;
  30.                 printDocument1.Print();
  31.             }
  32.         }



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:

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 13:48
Giovedì, 26/03/2009
grazie ho capito il concetto....adesso lo adatterò al mio caso

PM Quote