lørdag, januar 23, 2021

c# win form : print textbox

Daily Rush Debat Programmering c# win form : print textbox

  • Forfatter
    Emne
  • #0

    Thormam
    Bruger
    4.043 indlæg
    Offline

    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

Viser 12 kommentarer - 1 til 12 (af 12 i alt)
  • Forfatter
    Kommentarer
  • #1

    Holger-IST-
    Bruger
    6.970 indlæg
    Offline

    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

    #2

    Thormam
    Bruger
    4.043 indlæg
    Offline

    Ja 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.

    #3

    Fisker
    Bruger
    12.648 indlæg
    Offline

    Lige 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.

    #4

    Thormam
    Bruger
    4.043 indlæg
    Offline

    #3 ja den skal selfølgelig være

    StringReader myReader = new StringReader(st­rText);

    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.

    #5

    Holger-IST-
    Bruger
    6.970 indlæg
    Offline

    den 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

    #6

    Thormam
    Bruger
    4.043 indlæg
    Offline

    Nå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.png

    Ved ikke lige med den MyReader hvad den gør. Den prøver at returnere om der er linjer eller ej eller lign.

    #7

    Prise
    Bruger
    607 indlæg
    Offline

    du 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.

    #8

    Thormam
    Bruger
    4.043 indlæg
    Offline

    #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

    #9

    Holger-IST-
    Bruger
    6.970 indlæg
    Offline

    Det 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.htm

    eller 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

    #10

    Thormam
    Bruger
    4.043 indlæg
    Offline

    Tak Holger – jeg vil lige teste den simple der for det her driller stadig.

    #11

    Thormam
    Bruger
    4.043 indlæg
    Offline

    haha

    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

    #12

    Holger-IST-
    Bruger
    6.970 indlæg
    Offline

    Np, 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

Viser 12 kommentarer - 1 til 12 (af 12 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.