Textbox drucken

Wie du oben schon gesagt hast muss ich folgenden Code ändern:

Code:
// Print each line of the file.
            while (count < linesPerPage &&
               ((line = streamToPrint.ReadLine()) != null))
            {
                yPos = topMargin + (count *
                   printFont.GetHeight(e.Graphics));
                e.Graphics.DrawString(line, printFont, Brushes.Black,
                   leftMargin, yPos, new StringFormat());
                count++;
            }

Wie übermittle ich jetzt den Text der Textbox?
 
Verstehst du was der Code jetzt tut? Jetzt ließt er aus einer Textdatei immer eine Zeile, und druckt diese Zeile aus.

Du machst folgendes: Du berechnest dir die Position an der du den Text haben willst (also leftMargin und yPos). Dann verwendest du e.Graphics.DrawString um dein Text deiner Textbox zu drucken.
 
Hmmm... irgendwie nicht, weil ja noch keine Textbox angegeben wurde. Das ist ja das Problem. Den Text an sich verstehe ich.


Code:
 streamToPrint = new StreamReader
               ("C:\\My Documents\\MyFile.txt");

Hier teile ich ja mit, das er die myfile.txt drucken soll. Das will ja nicht, sondern meine textbox!



ist das eine Möglichkeit?

Code:
byte[] streamtoprint = Encoding.ASCII.GetBytes(textBox1.Text.ToString());
MemoryStream stream = new MemoryStream(streamtoprint);
 
Zuletzt bearbeitet:
Hallo,

Schau dir doch mal an was streamToPrint eigentlich ist: Es ist ein StreamREADER. Der hat nichts mit dem drucken an sich zu tun. Da werden nur die Daten aus der Datei gelesen.

C#:
streamToPrint.ReadLine()
ließt dann genau eine Zeile aus der Datei.

C#:
yPos = topMargin + (count *
				   printFont.GetHeight(ev.Graphics));
				ev.Graphics.DrawString(line, printFont, Brushes.Black,
				   leftMargin, yPos, new StringFormat());
druckt diese Zeile aus.
Zeile = String, TextBox.Text = String --> muss genau gleich funktionieren.

Aber eventuell solltest du dich nochmal genauer in die C# Grundlagen einarbeiten bevor du dich auf ein Gebiet wie drucken wagst.
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

Wir werden das schon hinbekommen. Also versuch mal folgendes:

C#:
// The PrintPage event is raised for each page to be printed.
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
  //X und Y Position des Texts auf der Seite bestimmen
  int x, y;
  x = ev.MarginBounds.Left; //Ganz am linken Rand
  y = ev.MarginBounds.Top; //Ganz oben

  //Schriftart laden in der gedruckt werden soll
  Font printFont = new Font("Arial", 10);

  //Den Text der Textbox drucken
  ev.Graphics.DrawString(TextBox1.Text, printFont, Brushes.Black,
               x, y, new StringFormat());

  //Druckvorgang abschließen
  ev.HasMorePages = false;
}

Das ist der eigentliche Druckvorgang. Was du noch brauchst ist ein PrintDocument an dessen PrintPage-Event du diesen EventHandler anhängst:
C#:
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);

Wenn du dieses Dokument dann drucken willst musst du
C#:
pd.Print();
aufrufen.

Ich bin jetzt davon ausgegangen, dass sich der Text in der Textbox in einer Zeile ausgeht.
 
Zuletzt bearbeitet von einem Moderator:
Code:
  while (count < linesPerPage &&
               ((line =   textBox.Lines.ToString()) != null))
            {
                yPos = topMargin + (count *
                  printFont.GetHeight(e.Graphics));
                e.Graphics.DrawString(line, printFont, Brushes.Black,
                   leftMargin, yPos, new StringFormat());
                count++;
            }

Zum Zeilen zählen funktioniert textBox.lines.ToString nicht.
 
Stimmt, weil eine TextBox keine Property Lines hat.
Du kannst folgendes machen:

C#:
string[] lines = TextBox.Text.Split("\n");
int lineCount = lines.Length;

while (count < linesPerPage && count < lineCount)
{
  ...
}
 
Zuletzt bearbeitet von einem Moderator:
Fehler 1 Die beste Übereinstimmung für die überladene string.Split(params char[])-Methode hat einige ungültige Argumente.

Fehler 2 1-Argument: kann nicht von "string" in "char[]" konvertiert werden.

Code:
string[] lines = TextBox.Text.Split("\n");

das "\n" mag er nicht.
 
Zurück