C# 用c语言打印richtextbox#
我有richtextbox和预览对话框。 当我想预览时,我想看到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
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;
}
}