Hallo zusammen
Ich habe ein kleines Programm entwickelt welches u.a Datensätze in einer Listbox (LstAnzeige) anzeigt, was tadellos funktioniert. Nun habe ich zusätzlich noch eine Printerfunktion eingebaut, d.h. beim Klicken auf den Drucken Button sollen die Einträge aus der Listbox auf dem Drucker ausgegeben werden. Doch der druckt nur weisse Blätter was mache ich falsch?
Danke für Eure Hilfe.
die beide Elemente "PrintDialog und PrintDocument" habe ich natürlich ebenfalls eingebunden im Form und bis zum Druckerauswahlfeld klappt alles.. doch dann druckt der Drucker wie gesagt zwar was aus aber nur ne leere Seite.
Muss mich korrigieren: der Drucker druckt rein gar nichts.
public Form1()
{
InitializeComponent();
}
private StringReader myReader;
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
LstAnzeige.Items.Add("test" + i);
protected void CmdPrint_Click(object sender, EventArgs e)
{
// Printer Dialog Feld einblenden wo der User den Drucker auswählen und ggf. anpassen kann
// Und dann ListBox Einträge printen
PrintDialog.Document = PrintDocument;
string strText = "";
foreach (object x in LstAnzeige.Items)
{
strText = strText + x.ToString() + "\n";
}
myReader = new StringReader(strText);
if (PrintDialog.ShowDialog() == DialogResult.OK)
{
this.PrintDocument.Print();
}
}
protected void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPosition = 0;
int count = 0;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
string line = null;
Font printFont = this.LstAnzeige.Font;
SolidBrush myBrush = new SolidBrush(Color.White);
linesPerPage =
ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);
// Iterate over the string using the StringReader, printing each line.
while (count < linesPerPage && ((line = myReader.ReadLine()) != null))
yPosition = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(line, printFont,
myBrush, leftMargin,
yPosition, new StringFormat());
count++;
// If there are more lines, print another page.
if (line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
myBrush.Dispose();
}
Hast du denn schon einmal mit dem Debugger geschaut was da los ist?
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Hast du überhaupt die Ereignismethode printDocument1_PrintPage
richtig mit dem Ereignis PrintPage
verbunden (die Namensgebung printDocument1
vs. PrintDocument
deutet eher nicht darauf hin)?
PS: Statt dem myBrush.Dispose()
packe den Code besser in eine using(...)
-Anweisung.
Hallo zusammen
Habe den Fehler gefunden und zwar habe ich in der while Schleife die {} Klammern vergessen daher ist der Loop gar nie gelaufen sprich der Wert war immer null..
Lustigerweise hat der Debugger da nichts angezeigt bzw. ich habe nicht gemerkt dass die Schleife eben falsch ablief
Dann hast du nicht korrekt mit dem Debugger gearbeitet. - Normalerweise springst du für jeden Schleifenumlauf erneut in den Rumpf. - Nach deiner Beschreibung dürfte das nur einmal passieren und sollte ein starkes Indiz liefern.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |