Druckerauswahl

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Skaletti.

    Druckerauswahl

    Hallo und "Frohe Weihnachten".
    Bin nach langer Zeit mal wieder in diesem Forum.
    Ich möchte gerne einen Drucker auswählen und eine Form drucken.
    Das Drucken mit dem Standartdrucker funzt.
    Ich komme auch nach der Druckerauswahl bis zur Druckvorschau und der Druck wird auch eingeleitet.
    Aber es kommt dann die Fehlermeldung: Die Einstellungen für den Zugriff auf den Drucker sind ungültig.
    Der jetzige Quellcode:

    Quellcode

    1. Option Explicit On
    2. Option Strict Off
    3. Imports System.IO
    4. Imports System.Drawing.Printing
    5. Private WithEvents PrintDoc As New System.Drawing.Printing.PrintDocument
    6. Private PrintPrev As New System.Windows.Forms.PrintPreviewDialog
    7. Private Sub cmdDrucken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDrucken.Click
    8. PrintPrev.Document = PrintDoc
    9. PrintPrev.WindowState = FormWindowState.Maximized
    10. PrintPrev.ShowDialog()
    11. For i = 1 To 1
    12. PrintPrev.Document.DefaultPageSettings.PrinterSettings.PrinterName = cboDruckerAuswahl.Text
    13. PrintPrev.Document.Print()
    14. Next
    15. NummerTextBox.Text = CStr(CDbl(NummerTextBox.Text) + 1)
    16. End Sub


    Ins Formload:

    Quellcode

    1. Private Sub Quittung_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Me.Quittung_VereineTableAdapter.Fill(Me.PokalDataSet.Quittung_Vereine)
    3. For Each Printername As String In PrinterSettings.InstalledPrinters
    4. cboDruckerAuswahl.Items.Add(Printername)
    5. Next
    6. cboDruckerAuswahl.Text = PrintPrev.Document.PrinterSettings.PrinterName
    7. End Sub


    Irgendwo ist noch ein Fehler.
    Für jede Hilfe, mein Dank im voraus.
    Gruß Skaletti!
    Hallo,
    Danke für die schnelle Antwort. Option Strict auf On und Drucker trennen und wieder anschließen.
    Funzt jetzt soweit.
    Es gibt jetzt noch ein weiteres Problem:
    Starte ich die Anwendung mit dem "Debugger", läuft sie perfekt.
    Starte ich die Anwendung mit der "exe" = Fehler beim FormLoad:
    Unbehandelte Ausnahme in der Anwendung u.s.w.
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt!
    Wird der Button "Weiter" gedrückt läuft auch die Anwendung weiter.
    Diesen Fehler kenne ich überhaupt noch nicht. Ursache??
    Gruß Skaletti!
    Das irgendwas mit der Zeile 7 im Formload zu tun:

    Quellcode

    1. cboDruckerAuswahl.Text = PrintPrev.Document.PrinterSettings.PrinterName

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Skaletti“ () aus folgendem Grund: Zusätzliche Information

    Verschiebe einmal den Code vom Form.Load in das Form.Shown-Event.

    VB.NET-Quellcode

    1. Private Sub Quittung_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown' Load
    Hier kann der Debugger den Code behandeln. Du hast wahrscheinlich ein 64-Bit-System am laufen. Die Fehlermeldung sagt dir, dass du ein Objekt verwenden willst, dass noch nicht instanziiert ist.
    Ich vermute auch die Zeile #7 - das PrintPrev.Document muss hier noch Nothing sein!
    Hallo Frühaufsteher.
    Danke für die schnelle Antwort und Mühe.

    Du hast wahrscheinlich ein 64-Bit-System am laufen.

    Das ist richtig.

    Verschiebe einmal den Code vom Form.Load in das Form.Shown-Event.

    Habe ich gemacht.
    Jetzt tritt allerdings auch beim Anwendungsstart durch den Debugger der Fehler auf:
    Eine nicht behandelte Ausnahme des Typs "System.NuillReferenceException" ist in ***.exe aufgetreten.
    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt!

    Markiert ist Zeile 7
    Start mit exe = Fehler geblieben.
    Gruß Skaletti!
    Wie @us4711: und ich weiter oben im letzten Satz schrieb...
    Nach deinem Codeauszug nach ist im Form.Load-Event das PrintPrev.Document noch nicht deklariert. Das machst du erst in Zeile #11 beim cmdDrucken.Click-Event - und das kann nur später sein.
    Prüfe einmal im Fehlerfall nacheinander PrintPrev.Document.PrinterSettings wenn du mit der Maus darüberfährst, was die IntelliSence dazu auswirft...
    Lasse die Zeile 7 einfach weg. Ich denke, diese Zeile ist sowieso nicht erforderlich.
    Du weist im cmdDrucken.Click-Event in der Zeile #15 den Drucker zu, den du zuvor in der Combo ausgewählt hast...
    For i = 1 To 1 ... ist sinnlos - diese For/Next kannst du weglassen.

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