C♯, C#相談室 Part34
レス数が950を超えています。1000を超えると書き込みができなくなります。
0983デフォルトの名無しさん
2006/10/31(火) 18:22:13どうしたらいいでしょうか?
private int printingPosition;
private void printDocument_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
printingPosition = 0;
}
private int GetLengthForPrint(string text, int start, Font font, System.Drawing.Printing.PrintPageEventArgs e, StringFormat format)
{
int min = 0, max = text.Length - start;
float targetHeight = (float)e.MarginBounds.Height;
if (!(e.Graphics.MeasureString(text.Substring(start, max), font, e.MarginBounds.Width, format).Height > targetHeight))
return max;
while (min + 1 < max)
if (e.Graphics.MeasureString(text.Substring(start, (min + max) / 2), font, e.MarginBounds.Width, format).Height > targetHeight)
max = (min + max) / 2;
else
min = (min + max) / 2;
return min;
}
private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
StringFormat format = StringFormat.GenericTypographic;
int length = GetLengthForPrint(textMain.Text, printingPosition, textMain.Font, e, format);
e.Graphics.DrawString(textMain.Text.Substring(printingPosition, length), textMain.Font, Brushes.Black, e.MarginBounds, format);
printingPosition += length;
if (printingPosition >= textMain.Text.Length)
e.HasMorePages = false;
else
e.HasMorePages = true;
}
レス数が950を超えています。1000を超えると書き込みができなくなります。