Problem beim Drucken vom Inhalt mehrerer RichTextBoxes

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 57 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Problem beim Drucken vom Inhalt mehrerer RichTextBoxes

    Hallo erstmal. Bin noch ein ziemlicher Anfänger in der VB.NET Programmierung und wurde vor die Aufgabe gestellt ein Programm, das auch eine Druckfunktion enthält, zu programmieren. Allerdings hatte ich mit dem Drucken in der Programmierung noch nie etwas zu tun.

    Ich bin gerade dabei eine Anwendung zu programmieren mit der ich bestimmten Inhalt von insgesamt 3 RichTextBoxes ausdrucken soll (soweit diese Text enthalten). An sich funktioniert auch schon alles, allerdings überschreibt die 2. RichTextBox immer die 1. und die 3. überschreibt diese dann nochmal. Also so, dass das Dokument nur eine Zeile lang ist und diese 3 mal beschrieben wurde. Ich habe mir schon überlegt, ob ich das mit einem einfachen "vbNewLine" hinbekommen könnte, weiß aber nicht wo ich denn dann diese Anweisung einfügen sollte oder ob das überhaupt so funktionieren kann.

    Meine Druckfunktion:

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. If RichTextBox1.Text <> "" Then
    3. RichTextBox1.SelectAll()
    4. e.Graphics.DrawString( _
    5. RichTextBox1.SelectedText, _
    6. RichTextBox1.SelectionFont, _
    7. Brushes.Black, _
    8. New System.Drawing.RectangleF( _
    9. e.MarginBounds.Top, _
    10. e.MarginBounds.Left, _
    11. e.PageBounds.Width, _
    12. e.PageBounds.Height))
    13. e.HasMorePages = False
    14. End If
    15. If RichTextBox2.Text <> "" Then
    16. RichTextBox2.SelectAll()
    17. e.Graphics.DrawString( _
    18. RichTextBox2.SelectedText, _
    19. RichTextBox2.SelectionFont, _
    20. Brushes.Black, _
    21. New System.Drawing.RectangleF( _
    22. e.MarginBounds.Top, _
    23. e.MarginBounds.Left, _
    24. e.PageBounds.Width, _
    25. e.PageBounds.Height))
    26. e.HasMorePages = False
    27. End If
    28. If RichTextBox3.Text <> "" Then
    29. RichTextBox3.SelectAll()
    30. e.Graphics.DrawString( _
    31. RichTextBox3.SelectedText, _
    32. RichTextBox3.SelectionFont, _
    33. Brushes.Black, _
    34. New System.Drawing.RectangleF( _
    35. e.MarginBounds.Top, _
    36. e.MarginBounds.Left, _
    37. e.PageBounds.Width, _
    38. e.PageBounds.Height))
    39. e.HasMorePages = False
    40. End If
    41. End Sub


    Der dazugehörige Aufruf durch einen Button:

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    3. With PrintDocument1
    4. .PrinterSettings = CType(PrintDialog1.PrinterSettings.Clone, Printing.PrinterSettings)
    5. .Print()
    6. End With
    7. End If
    8. End Sub


    Und mein kleines Testbeispiel zum Befüllen der RichTextBoxes beim Start des Programmes:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. RichTextBox1.Text = "Test 1"
    3. RichTextBox2.Text = "Test 2"
    4. RichTextBox3.Text = "Test 3"
    5. End Sub


    Ich würde mich über jegliche Hilfe freuen ^^

    MfG
    Willkommen im Forum. :thumbup:

    vbPotato schrieb:

    Druckfunktion
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    klingt logisch weil du zuerst die RTB1 einfügst dann schreibst du mit der 2. drüber und nochmal mit der 3. ich sehe nirgends wo du prüfst wieviel schon am Blatt steht bzw. du fügst nicht am Ende der Seite ein.
    Weiters finde ich If RichTextBox3.Text <> "" then unschön, machs vielleicht mit If Not String.IsNullOrWhitespace/IsNullOrEmpty(RichTextBox3.Text) then
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Snaptu schrieb:

    klingt logisch weil du zuerst die RTB1 einfügst dann schreibst du mit der 2. drüber und nochmal mit der 3. ich sehe nirgends wo du prüfst wieviel schon am Blatt steht bzw. du fügst nicht am Ende der Seite ein.


    Wie füge ich denn den Inhalt einer RichTextBox ans Ende einer Seite ein?

    vbPotato schrieb:

    Wie füge ich ... ein?
    Fang mit dem Fundament an, bevor Du die Farbe des Türknaufs auswählst.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jou.

    vbPotato schrieb:

    Anfänger
    Vollziehe das Beispiel Zeile für Zeile nach.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich kann daraus leider nicht folgern wie ich denn nun mein Programm dazu bringe die verschiedenen Textquellen, also die RTBs, nicht überschreiben zu lassen. Es handelt sich auch nicht um viel Text, ich will es also auf eine Seite bringen und nicht unnötig Papier verschwenden indem für die ~5 Zeilen pro RTB ein komplettes Blatt benutzt wird.

    vbPotato schrieb:

    nicht unnötig Papier verschwenden
    Stell um auf PDF-Druck. 8o
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jou.

    vbPotato schrieb:

    wenns fertig ist
    Isses denn fertig :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    vbPotato schrieb:

    mein Problem
    Trenne mal Dein Problem in mehrere Teilprobleme auf, die da wären:
    • Mache aus dem Inhalt mehrerer RichTextBoxen einen einzigen Text.
    • Drucke einen Text.
    Ich nehme mal an, Du weißt nicht, wie Du aus dem Inhalt mehrerer RichTextBoxen einen einzigen (Rich-)Text machen sollst.
    Du druckst nämlich alle 3 Texte übereinander.

    Lies am besten mal das Tutorial.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    RodFromGermany schrieb:

    Ich nehme mal an, Du weißt nicht, wie Du aus dem Inhalt mehrerer RichTextBoxen einen einzigen (Rich-)Text machen sollst.


    Theoretisch schon. Ich muss sie in einem string speichern. Das Problem dabei ist, ich weiß nicht wie ich und ob ich überhaupt formatierten Text aus einer/mehrerer RTB/s in einem string speichern kann ohne, dass diese Texte ihre Formatierung verlieren.

    vbPotato schrieb:

    Theoretisch schon.
    Ich hab meinem Post Deinen Output angehängt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    vbPotato schrieb:

    Allerdings blicke ich jetzt null durch
    Was genau ist das Problem?
    Zieh die Quellen bitte noch mal neu, ich hab sie leicht verbessert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!