C# Drucken

xlon

Mitglied
Hallo :)

Ich habe ein kleines Problem mit dem Drucken unter C#

das Drucken einer textbox bzw. mehrerer ist kein Problem. Mein Problem ist, das jenachdem wie groß die Textbox ist, das es dann nicht mehr auf mein Blatt passt, ich würde nur sehr ungern die Textbox begrenzen. gibt es eine Möglichkeit das wenn AUF DEM BLATT eine zeile voll ist, das er dann einfach eine nächste Zeile anfängt. Denn so wie ich es jetzt habe, schreibt er einfach über die Zeile hinweg, und fängt erst dann eine neue Zeile an, wenn in der Textbox eine neue Zeile anfängt.

mein code:

Code:
private void printDocument1_PrintPage_1(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Graphics g = e.Graphics;
Rectangle printRec = e.MarginBounds;


Font printFont = new Font("Arial", 6, FontStyle.Bold);


// Umrandung drucken:
//g.DrawRectangle(Pens.Black, printRec);
// Ausgabeposition:
float x = printRec.X, y = printRec.Y;
// Zeilenhöhe bestimmen:
float lineH = g.MeasureString("X", fnt).Height;
// Layoutformat festlegen:
StringFormat sf = new StringFormat(StringFormatFlags.NoWrap); // deaktiviert Textumbruch während des Formatierens
// Alle Zeilen durchlaufen:
RectangleF rectf1 = new RectangleF(x, y, printRec.Width, lineH);

g.DrawString("Beschreibung:", printFont, Brushes.Black, rectf1, sf);
y += lineH;
for (int i = 0; i < txtBeschreibung.Lines.Length; i++)
{
RectangleF rectf = new RectangleF(x, y, printRec.Width, lineH);
// Zeile drucken:
g.DrawString(txtBeschreibung.Lines[i], printFont, Brushes.Black, rectf, sf);
y += lineH;
}

g.DrawString("", printFont, Brushes.Black, rectf1, sf);
y += lineH;

g.DrawString("", printFont, Brushes.Black, rectf1, sf);
y += lineH;
g.DrawString("", printFont, Brushes.Black, rectf1, sf);
y += lineH;


RectangleF rectf2 = new RectangleF(x, y, printRec.Width, lineH);

g.DrawString("Lösung: \n", printFont, Brushes.Black, rectf2, sf);
y += lineH;



for (int i = 0; i < txtLoesung.Lines.Length; i++)
{
RectangleF rectf = new RectangleF(x, y, printRec.Width, lineH);
// Zeile drucken:
g.DrawString(txtLoesung.Lines[i], printFont, Brushes.Black, rectf, sf);
y += lineH;
}
}
 
Über
C#:
e.Graphics.MeasureString
kannst du die Höhe und Breite eines Strings ermitteln.
Über
C#:
e.MarginBounds
kannst du abfragen, wo die Ränder deines Papierblattes liegen (d.h. was der Bereich ist, der bedruckt werden soll. Dieser ist in der Regel kleiner als das tatsächliche Papier, da niemand Text bis auf den letzten Nanometer zum Rand drucken will).
Dann musst du deine Textzeile in lauter Wörter unterteilen (also beispielsweise nach Leerzeichen im String suchen) und dann für jedes Wort einzeln überprüfen, ob es noch auf das Blatt passt oder nicht. Wenn nicht --> neue Zeile anfangen.
Nützlich für den Zeilenumbruch könnte noch sein über
C#:
printFont.GetHeight(e.Graphics)
die Höhe der Schriftgröße zu ermitteln.

EDIT: Sehe gerade, MarginBounds hast du selber schon gefunden ;-)
 
Zurück