c# win form : print textbox
Daily Rush › Debat › Programmering › c# win form : print textbox
- Dette indlæg indeholder 12 kommentarer, har 4 deltagere og blev senest opdateret af
Holger-IST- for 11 år, 1 måned siden.
-
ForfatterEmne
-
26/11/2009 kl. 11:13 #0
Har en textbox jeg gerne vil printe indholdet af til min default printer. Stille og rolig – men de guides jeg finder går meget i detaljer og har mange funktioner så jeg må indrømme jeg mister overblikket!
Har i en simpel metode eller har i en rigtig god side med guide til det eller video for det driller mig.
Har kontakt med min printer for:
private void btn_Print_Click(object sender, EventArgs e)
{ printDocument1.Print();
}.. skriver en tom side ud
-
ForfatterEmne
-
ForfatterKommentarer
-
26/11/2009 kl. 11:20 #1
hm.. prøv måske at se på denne, virker ret kort:
http://www.c-sharpcorner.com/UploadFile/mgold/PritinginCSharp11222005040630AM/PritinginCSharp.aspx- Holger "A woman drove me to drink and I didn't even have the decency to thank her." - W. C. Fields
26/11/2009 kl. 12:38 #2Ja den ser fin ud. Har rettet den lidt til men kommer med følgende fejl.
protected void ThePrintDocument_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.txt_Kommentar.Font;
SolidBrush myBrush = new SolidBrush(Color.Black);
// Work out the number of lines per page, using the MarginBounds.
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)
{
// calculate the next line position based on the height of the font according to the printing device
yPosition = topMargin + (count * printFont.GetHeight(ev.Graphics));
// draw the next line in the rich edit control
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();
}
}Kommer med følgende fejl:
Error 1 The name ‘myReader’ does not exist in the current context
Error 2 Invalid expression term ‘&&’Og så kan den ikke li “Borderstyle”, “MyReader” og “ThePrintDocument”..
private void btn_Print_Click(object sender, EventArgs e)
{
printDialog1.Document = ThePrintDocument;
string strText = this.txt_Kommentar.Text;
myReader = new StringReader(strText);
if (printDialog1.ShowDialog() == DialogResult.OK)
{
this.ThePrintDocument.Print();
}
}private void btn_Preview_Click(object sender, EventArgs e)
{
try
{
string strText = this.txt_Kommentar.Text; // read string from editor window
StringReader myReader = new StringReader(strText);
PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog(); // instantiate new print preview dialog
printPreviewDialog1.Document = this.ThePrintDocument;
printPreviewDialog1.BorderStyle = FormBorderStyle.Fixed3D;
printPreviewDialog1.ShowDialog(); // Show the print preview dialog, uses print page event to draw preview screen
}
catch (Exception exp)
{
System.Console.WriteLine(exp.Message.ToString());
}
}Nogen ideer? Forstår ikke helt Borderstyle for den er da en del af System.Windows.Forms
Skal siges jeg bruger Visual Studio 2008 og jeg har trukket “PrintDocument1” og “printDialog1” ind fra toolbox.
26/11/2009 kl. 12:44 #3Lige umiddelbart burde myReader vel være:
StringReader myReader = new StringReader(strText);
Og husker jeg rigtigt eksisterer printDialog1 ikke i din kontekst, du skal først hive den ud af sender mener jeg.
26/11/2009 kl. 12:56 #4#3 ja den skal selfølgelig være
StringReader myReader = new StringReader(strText);
printDialog1 bruger han umidelbart her:
printDialog1.Document = ThePrintDocument;
Og er vel også der ThePrintDocument bliver lavet men der er noget galt
I kan se koden som den er nu her:
http://www.thormam.dk/print01.png
Lidt nemmere at se fejlene på den måde.
26/11/2009 kl. 13:06 #5den med && er fordi din while “condition” slutter for tidligt… tror du har en ) for meget lige efter linesPerPage
myReader brokker den sig over, da den ikke ser ud til at være defineret når du prøver at bruge den.
altså enten skal det være en variabel/property eller lign. i klassen eller skal den
det er det samme der gælder sig for ThePrintDocument, ser ikke ud til at den er defineret nogen steder. måske fordi dit print dokument hedder PrintDocument1 i det for? (men ved det ikke lige)
- Holger "A woman drove me to drink and I didn't even have the decency to thank her." - W. C. Fields
26/11/2009 kl. 13:32 #6Nåede lige at tænke tanken og ændre “ThePrintDocument” til “printDocument1” og fint med && den er fikset.
Det ser sådan ud nu:
http://www.thormam.dk/print02.pngVed ikke lige med den MyReader hvad den gør. Den prøver at returnere om der er linjer eller ej eller lign.
26/11/2009 kl. 14:03 #7du roder rundt med den myReader, oppe i den øverste metode (som ser ud til at være den eneste metode der bruger den til noget) er den ikke erklæret, og i de andre metoder bliver den erklæret og initialiseret men aldrig brugt.
edit:
Og så vidt jeg kan se, bliver den øverste metode ikke kaldt nogen steder fra.26/11/2009 kl. 14:17 #8#8 godt observeret og det er derfor der er et problem Også det fejlen siger.
Det er mere hvad den bliver brugt til og ikke mindst hvordan det rettes heh
26/11/2009 kl. 14:25 #9Det er en string reader der bliver brugt til at læse en String (lidt som at skulle læse fra en fil…).
Altså han læser en linie af teksten ad gangen og “renderer” den via PrintPageEventArgs (ev).
Tror bare det er det den bliver brugt til… men igen ikke lige noget jeg har roddet med.
ellers kan det være dette eksempel er simplere:
http://www.java2s.com/Code/CSharp/GUI-Windows-Form/BasicPrinting.htmeller en noget advanceret guide her:
http://www.devarticles.com/c/a/C-Sharp/Printing-Using-C-sharp/- Holger "A woman drove me to drink and I didn't even have the decency to thank her." - W. C. Fields
27/11/2009 kl. 10:06 #10Tak Holger – jeg vil lige teste den simple der for det her driller stadig.
27/11/2009 kl. 10:33 #11haha
private void btn_Print_Click(object sender, EventArgs e)
{
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(this.PrintPageEvent);
pd.Print();
}
private void PrintPageEvent(object sender, PrintPageEventArgs ev)
{
Font oFont = new Font(“Arial”, 10);
Rectangle marginRect = ev.MarginBounds;ev.Graphics.DrawRectangle(new Pen(System.Drawing.Color.Black), marginRect);
ev.Graphics.DrawString(txt_Text.Text, oFont, new SolidBrush(System.Drawing.Color.Blue),
(ev.PageBounds.Right / 2), ev.PageBounds.Bottom / 2);
}Det virker – skal siges at det her laver en rektangel på siden jeg printer og da jeg testede det på en bonprinter (dem der står i butikkerne) som printer pissehurtigt fordi den er thermal – ja så nåede den at printe 5 meter rektangel ud inden jeg nåede over til den heh.
Skiftede til en anden printer og så så det fint ud.Tak for hjælpen! Jeg kan nu sidde og lege lidt med hvordan det skal se ud i PrintPageEvent
27/11/2009 kl. 12:06 #12Np, det er jo også interessant at lige snuse lidt til noget nyt inden for C#
- Holger "A woman drove me to drink and I didn't even have the decency to thank her." - W. C. Fields
-
ForfatterKommentarer
- Du skal være logget ind for at kommentere på dette indlæg.
























