簡體   English   中英

在C#中打印richtextbox

[英]printing richtextbox in c#

我有richtextbox和預覽對話框。 當我想進行預覽時,我想查看Richtextbox的所有頁面,但是現在我只能看到第一個頁面。

請幫我

char[] param = { '\n' };
string [] lines = {};

if (pd.PrinterSettings.PrintRange == PrintRange.Selection)
{
   lines = rtb.SelectedText.Split(param);
}
else
{
   lines = rtb.Text.Split(param);
}

int i = 0;
char[] trimParam = { '\r' };
foreach (string s in lines)
{
   lines[i++] = s.TrimEnd(trimParam);
}
int linesPrinted = 0;
int x = e.MarginBounds.Left;
int y = e.MarginBounds.Top;
Brush brush = new SolidBrush(rtb.ForeColor);

while (linesPrinted < lines.Length)
{
   e.Graphics.DrawString(lines[linesPrinted++],
        rtb.Font, brush, x, y);
   y += 15;
   if (y >= e.MarginBounds.Bottom)
   {
       e.HasMorePages = true;
       return;
   }
   else
   {

       e.HasMorePages = false;
   }
}

因為即使在打印頁面中也使用此方法,所以每次打印新頁面時,您都會再次讀取RichTextBox的內容:

lines = rtb.Text.Split(param);

然后您從頭開始...

因此,您只需要閱讀第一頁中的RichTextBox內容即可。例如,要解決此問題,您可以在方法外聲明一個變量:

private int printPage = 0 ;

並從方法外部化變量:

string [] lines = {};
int linesPrinted = 0;

新代碼變為(我尚未測試過-僅是概念證明):

 if(printPage <= 0) {
   //First Page
   char[] param = { '\n' };
   linesPrinted = 0;
   if (pd.PrinterSettings.PrintRange == PrintRange.Selection)
   {
       lines = rtb.SelectedText.Split(param);
   }
   else
   {
       lines = rtb.Text.Split(param);
   }
  }
   int i = 0;
   char[] trimParam = { '\r' };
   foreach (string s in lines)
   {
       lines[i++] = s.TrimEnd(trimParam);
   }

   int x = e.MarginBounds.Left;
   int y = e.MarginBounds.Top;
   Brush brush = new SolidBrush(rtb.ForeColor);

   while (linesPrinted < lines.Length)
   {
       e.Graphics.DrawString(lines[linesPrinted++],
            rtb.Font, brush, x, y);
       y += 15;
       if (y >= e.MarginBounds.Bottom)
       {
           e.HasMorePages = true;
           printPage++;
           return;
       }
       else
       {
           e.HasMorePages = false;
       }
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM