.NET Programming
 

     
.NET Class to Print the contents of a ListBox

Keywords: Printer Print Listbox PFont PrintDocument Page Margins

 

 
 

ciloxan

ciloxan pris ciloxan pris ciloxan

    class Print

    {

        string[] Rows;

        Font PFont;

        int DocPos = 0;

 

        public void PrintListBox(ListBox LB)

        {

 

            Rows = new string[LB.Items.Count];

            DocPos = 0;

 

            for (int x = 0; x < LB.Items.Count; x++)

            {

                Rows[x] = LB.Items[x].ToString();

            }

 

            PFont = new Font("Tahoma", 10);

            PrintDocument PD = new PrintDocument();

            PD.PrintPage += new PrintPageEventHandler(PD_PrintPage);

            PD.Print();

        }

 

 

 

        private void PD_PrintPage(object sender, PrintPageEventArgs ev)

        {

            float lines = 0;

            float y = 0;

            int count = 0;

            float lMargin = ev.MarginBounds.Left;

            float tMargin = ev.MarginBounds.Top;

            string line = null;

            SizeF size;

 

            lines = ev.MarginBounds.Height / PFont.GetHeight(ev.Graphics);

 

 

            while(count < lines && DocPos  < Rows.Length   )

            {

                y = tMargin + (count * PFont.GetHeight(ev.Graphics));

 

                size = ev.Graphics.MeasureString(Rows[DocPos ], PFont);

                if (size.Width < ev.MarginBounds.Width)

                {

                    ev.Graphics.DrawString(Rows[DocPos],

                        PFont, Brushes.Black, lMargin, y, new StringFormat());

                }

                else

                {

                    int SplitPoint=0;

                    GetSplitPosition(Rows[DocPos], size.Width ,

                        ev.MarginBounds.Width ,out SplitPoint );

                    ev.Graphics.DrawString(Rows[DocPos].Substring(1,SplitPoint )

                        , PFont, Brushes.Black, lMargin, y, new StringFormat());

                    count++;

                    y = tMargin + (count * PFont.GetHeight(ev.Graphics));

                    ev.Graphics.DrawString(Rows[DocPos].Substring( SplitPoint+1

                        ), PFont, Brushes.Black, lMargin, y, new StringFormat());

                }

                count++;

                DocPos++;

            }

 

 

            if(DocPos < Rows.Length )

                ev.HasMorePages = true;

            else

                ev.HasMorePages = false;

        }

 

        private void GetSplitPosition(string LineText, float TextWidth,

            float pageWidth, out int SplitPoint)

        {

            SplitPoint = 0;

            int StartPosition = (int)(LineText.Length * (pageWidth / TextWidth));

            SplitPoint = LineText.Substring(1, StartPosition).LastIndexOf(" ");

        }

 

    }


 


 PTerryWave LLC      Return to Programming Listing
About