Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用c语言打印richtextbox#_C# - Fatal编程技术网

C# 用c语言打印richtextbox#

C# 用c语言打印richtextbox#,c#,C#,我有richtextbox和预览对话框。 当我想预览时,我想看到richtextbox的所有页面,但现在我只能看到第一页很多次 请帮帮我 char[] param = { '\n' }; string [] lines = {}; if (pd.PrinterSettings.PrintRange == PrintRange.Selection) { lines = rtb.SelectedText.Split(param); } else { lines = rtb.Text.S

我有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;
   }
}
char[]param={'\n'};
字符串[]行={};
如果(pd.PrinterSettings.PrintRange==PrintRange.Selection)
{
lines=rtb.SelectedText.Split(参数);
}
其他的
{
行=rtb.Text.Split(参数);
}
int i=0;
char[]trimParam={'\r'};
foreach(行中的字符串s)
{
行[i++]=s.TrimEnd(trimParam);
}
int linesprint=0;
int x=e.MarginBounds.Left;
int y=e.MarginBounds.Top;
笔刷=新的SolidBrush(rtb.ForeColor);
while(linesprint=e.MarginBounds.Bottom)
{
e、 HasMorePages=true;
返回;
}
其他的
{
e、 HasMorePages=false;
}
}

因为如果在打印页面中使用此方法,则每次打印新页面时,您都会再次读取RichTextBox的内容:

lines = rtb.Text.Split(param);
你从一开始就重新开始

所以你只能在第一页阅读RichTextBox的内容。。。 要解决此问题,您可以在方法之外声明一个变量:

private int printPage = 0 ;
并从方法中具体化变量:

string [] lines = {};
int linesPrinted = 0;
新代码变成了(我还没有测试它-只是一个概念证明):

if(printPage=e.MarginBounds.Bottom)
{
e、 HasMorePages=true;
printPage++;
返回;
}
其他的
{
e、 HasMorePages=false;
}
}
 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;
       }
   }