Print Funktion Visual Studio 10

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Käsekuchen.

    Was denn für ne Ausgabe? ListBox-Items? plain text? Die Form, die Du erstellt hast? Hast Du denn überhaupt schon zufriedenstellende Frankierergebnisse? Wenn ja, wie hast Du sie bekommen? Wär auch für die anderen in jenem Thread interessant.
    Hier findest Du mal eine (von vielen) Möglichkeiten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ne Zwischenfrage der soll bevor der PrintDialog geöffnet wird per gucken ob was in der list box ist. wie heißt der befehl, um zu überprüfen ob sie leer ist.


    VB.NET-Quellcode

    1. If lst_ausgabe = Empty Then
    2. MessageBox.Show("ListBox erst füllen")
    3. Else
    4. PrintPreviewDialog1.ShowDialog()
    5. End If
    Ahh, endlich ne Antwort auf eine meiner Post#2-Fragen. Es geht also irgendwie um den Inhalt einer ListBox.
    Es gibt mehrere Varianten.
    Ich nehme immer: If ListBox.Items.Count = 0 Then
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Habe es jetzt so: den Dialog öffnet er (mit Überprüfung) nur im Dialog steht nichts drin

    [update: habe das .txt bei ->

    VB.NET-Quellcode

    1. e.Graphics.DrawString(lst_ausgabe.Text, Font1, Brushes.Aqua, 100, 100) [/vbnet ] durch .tostring geändert jetzt habe ich bei der Druckvorschau eine unvollständige Zeile stehen
    2. [vbnet]
    3. Private Sub cmc_print_preview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmc_print_preview.Click
    4. If lst_ausgabe.Items.Count = 0 Then
    5. MessageBox.Show("ListBox erst füllen")
    6. Else
    7. PrintPreviewDialog1.ShowDialog()
    8. End If
    9. End Sub
    10. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    11. Dim Font1 As New Font("arial", 16, FontStyle.Regular)
    12. e.Graphics.DrawString(lst_ausgabe.Text, Font1, Brushes.Aqua, 100, 100)
    13. End Sub
    14. Private Sub cmd_print_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_print.Click
    15. PrintDocument1.Print()
    16. End Sub
    17. End Class

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Käsekuchen“ ()

    Uiuiui. Wenn Du mal ein paar Stunden/Tage/Wochen hast, schnapp Dir n VB-Lernstoffbuch.
    lst_Ausgabe.ToString = "Wandele die ListBox in einen String um" :huh:
    Aber Du willst doch bestimmt: "Wandele die Items/Zeilen/Einträge, die in der ListBox stehen, zu Strings um", richtig?
    -> For-Schleife über alle ListBox-Items und diese per DrawString zeichnen (Tipp: die Zielkoordinaten müssen immer anders sein, zumindest die y-Koordinate, sonst wird alles übereinandergeschrieben)
    Wie wär dazu Dein Codevorschlag?

    btw: bei Deinem Post ist irgendwo ein Code-Tag zuviel. Da ist ein fließender Übergang von Text zu Code und man erkennt schlecht, was wozu gehört. Zeile 1-4 dürfte wahrscheinlich nicht zum Code gehören, richtig?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Käsekuchen schrieb:

    VB.NET-Quellcode

    1. Private Sub cmd_print_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_print.Click
    2. PrintDocument1.Print()
    3. End Sub
    Das kannst Du ersatzlos streichen, denn der Druck wird über den PrintDialog ausgeführt, vorausgesetzt, Du dast dem Dialog das Dokument zugewiesen:

    VB.NET-Quellcode

    1. PrintPreviewDialog1.Document = PrintDocument1
    Das kannst Du im Designer machen oder im Code vor dem Aufruf des Dialogs.
    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!
    Habe das in einer For schleife getan der wert y wert wird bei jedem durchgang erhöht aber der text bleibt immer noch in einer Zeile

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. Dim Font1 As New Font("arial", 16, FontStyle.Regular)
    3. Dim x As Integer
    4. Dim y As Integer
    5. x = 100
    6. y = 30
    7. For z As Integer = 0 To 21 Step 1
    8. e.Graphics.DrawString(lst_ausgabe.ToString, Font1, Brushes.Aqua, 100, 30)
    9. 'x = x + 20
    10. y = y + 50
    11. Next z
    12. End Sub
    Ich weiß, das ist jetzt sehr spekulativ, aber könnte es daran liegen, dass Du x und y auch in Deine DrawString-Funktion einbauen musst, und zwar dort, wo jetzt noch ...Brushes.Aqua, 100, 30 steht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke. Die Ergebnisse stehen untereinander. Nur Vor dem Ergebnis in der Ausgabe steht 2

    "System.Windows.Forms.ListBox, Items.Count: 21, Items[0]" Kann ich das irgendwie wegbekommen sonst ist der rest nämlich abgeschnitten.

    ps. wie füge ich hier im Forum ein Screenshot ein (falls es geht ?)


    ----------------------------------------------------------------------------------------------------------------------------
    update: Das Komplette Ergebnis wird angezeigt habe mit den Schriftgrößen und arten rumprobiert. Jetzt ist nur noch dieser Text vor dem Ergebnis vorweg.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Käsekuchen“ ()

    Ehm ... was steht in Deiner Ausgabe? Das riecht danach, als hättest Du in Deinem Code noch irgendwo lst_Ausgabe.ToString stehen ... ach ja, in Zeile 11: e.Graphics.DrawString(lst_ausgabe.ToString, Font1, Brushes.Aqua, 100, 30). Und wie bereits in Post#9 geschrieben: lst_ausgabe.ToString durch lst_Ausgabe.Items(z).ToString ersetzen. Ich befürchte ganz heftig, dass Du nicht weißt, was Dein Code macht. Und das führt zu vielen weiteren
    Fragestunden

    Antwort für Frage 2: [erweiterte Antwort] -> Dateianhänge (steht unter dem großen Texteingabeformular).
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    lst_ausgabe.ToString ist falsch, falsch, falsch. Wie oft denn noch? Diese Anweisung versucht eine schriftliche Aussage über Deine ListBox zu machen. Die willst Du nicht. Du willst nicht wissen, welche Eigenschaften alles Deine ListBox hat. Obwohl, doch, eine, dazu komm ich gleich.
    Wenn ich nicht ungefähr wüsste, was das Problem ist, würde ich sagen: Wo stürzt das Programm ab? Welcher Code wird ausgeführt? Welcher Auswurf Welche Fehlermeldung kommt?

    Obwohl Du meine Frage immer noch nicht beantwortet hast, wie weit Du mit Deinem Frankierproblem gekommen bist, vermute ich, dass Du auf 21 Kombinationen gekommen bist, richtig? Richtig, denn zumindest da war Deine lst_ausgabe.ToString zu was nützlich, denn sie sagt, dass in der ListBox 21 Items drin sind: Items.Count: 21 Und was machst Du? Du willst diese in einer For-Schleife durchgehen und drucken. Wie sieht Deine For-Schleife aus? Du zählst von 0 bis 21 und rufst die Items auf. Von 0 - 21. Zähl mal bitte selber (notfalls mit Fingern) nach, wieviele Items das wären und pass Deinen Code entsprechend an.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für die Geduld mit mir.

    das frankieren müsste soweit fertig sein. und das Programm stürzt bei Zeile 52 mit out of Range ab

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. Dim Font1 As New Font("arial", 10, FontStyle.Regular)
    3. Dim x As Integer
    4. Dim y As Integer
    5. x = 100
    6. y = 30
    7. For z As Integer = 0 To 21 Step 1
    8. e.Graphics.DrawString(lst_ausgabe.Items(z).ToString, Font1, Brushes.Black, x, y)
    9. 'x = x + 20
    10. y = y + 50
    11. Next z
    12. End Sub
    Dein Code enthält 18 Zeilen. Was also für ne Zeile 52? Erneut meine Vermutung: Hier ist es Zeile 12. Denn Du hast meinen Rat nicht befolgt. Und damit ist mein Geduldstopf fast leer. Du zählst mit dem Code For z As Integer = 0 To 21 Step 1 von 0 bis 21. Das sind 22 Durchläufe. Du hast aber nur 21 Items. Natürlich stürzt er ab. Dein Programm kommt in der letzten Runde zu dem Ausdruck e.Graphics.DrawString(lst_ausgabe.Items(21).ToString, .... Es gibt kein Item Nummer 21. Deswegen der Absturz. Ja, es gibt 21 Items, aber deren Index ist nullbasiert -> Es gibt die Items 0 bis 20. Item(0), Item(1), ... Item(20). Mach aus Deinem For-Schleifencode: For z As Integer = 0 To 20. Der Zusatz Step 1 kann sogar weg. Aber noch viel besser wäre, wenn Du gar nicht erst in die Falle gerätst, nämlich mit:

    VB.NET-Quellcode

    1. For Each LBItemText As String In lst_Ausgabe.Items 'heiß soviel wie: gehe jedes Item in der ListBox durch...
    2. e.Graphics.DrawString(LBItemText, Font1, Brushes.Black, x, y) 'und schreibe es hin
    3. y += 50 'ist kürzer als y = y + 50
    4. Next 'das z kannst Du weglassen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    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!