Ausgewählten Drucker nach Programmende und Neustart merken?

Matze7

Mitglied
Hallo, habt ihr vielleicht eine Idee, wie man den einmal ausgewählten Drucker auch nach Programmende und Neustart des Programms merkt, so das er nicht jedesmal nach dem Start des Programms erneut ausgewählt werden muss?
(Derzeit ist eine Combobox mit allen verfügbaren Druckern da und der Standarddrucker wird automatisch darin ausgewählt)

(Für VB 2008 Express Edition)
 
Hallo Matze,

merke dir den Namen des aktuellen Standarddruckers
beim Start deines Programmes in einer Configdatei oder
Datenbank.
Danach kannst du den von dir ausgewählten Drucker ebenfalls speichern.
Bei Programmende setzt du den Standarddrucker wieder
zurück und beim nächsten Start setzt du den gespeicherten
Drucker von dir wieder.

Wie das setzen des Standarddruckers geht, siehst du hier.

Gruß
Jens
 
Hmmm, den Code den du beschreibst, habe ich schon drin. Sprich das auslesen des Standarddruckers ist nicht das Problem.

Ich möchte aber, dass beim Start eben nicht der Standarddrucker gewählt wird, sondern der Drucker, den ich beim letzten beenden des Programms im Druckerauswahlmenü ausgewählt hatte...
 
Hallo Matze,

wo ist denn da das Problem ?

Im SelectedIndex_Changed Ereignis der (ich vermute mal Combobox)
speicherst du dir den ausgewählten Eintrag ab, aber nur wenn die
Form bereits fertig geladen ist (das musst du dir in einer Variable merken).
Sonst wird

Beim nächsten Start des Programmes liest du den Selektierten Eintrag
im Load Ereignis der Form wieder aus und setzt den Eintrag automatisch in der Combobox.

Möchtest du sowas ? Und woran genau klemmt es dabei ?
Beim Speichern des Druckers ? Beim Auslesen ?

Gruß
Jens
 
Hallo Matze,

wo ist denn da das Problem ?

Im SelectedIndex_Changed Ereignis der (ich vermute mal Combobox)
speicherst du dir den ausgewählten Eintrag ab, aber nur wenn die
Form bereits fertig geladen ist (das musst du dir in einer Variable merken).
Sonst wird

Beim nächsten Start des Programmes liest du den Selektierten Eintrag
im Load Ereignis der Form wieder aus und setzt den Eintrag automatisch in der Combobox.

Möchtest du sowas ? Und woran genau klemmt es dabei ?
Beim Speichern des Druckers ? Beim Auslesen ?

Gruß
Jens

Danke für die Hilfe...

Klemmen tut es eher an der Umsetzung von beiden, also Speichern des Druckers und dem Auslesen dessen nach dem Programmstart. (Bin leider noch Newbie...)
 
Hallo Matze,

hier mal ein kleines Beispiel im Anhang, wie du einen Eintrag einer
Combobox oder ähnliches speichern kannst.
Die Klasse zum speichern kann man natürlich durch etwas
einfacheres ersetzen... die habe ich schnell von mir genommen,
um es zu demonstrieren.

Das ist nur ein Weg... es gibt etliche.
Man kann Objekte auch serialisieren, was im Endefekt das gleiche ist.

Gruß
Jens
 

Anhänge

Als Value wird die Variable s (in dem Beispiel von vbfun) in der Combobox hinzugefügt.
Un den Wert speicherst du.
Wie der Eintrag in dem XML File heißt (in meinem Bsp. "Eintrag")
bleibt dir überlassen. Du kannst es auch Drucker nennen.

Sorry, muss ins Bettchen ..........

Sollte hinzubekommen sein :-)

Ansonsten -> morgen gerne wieder Hilfe.
 
Hmmm, hab jetzt ein wenig herumprobiert, komme aber nicht so recht weiter...

Ich brauche ja eigentlich nur die Public Shared Sub SaveSetting und die Public Shared Function GetSetting Funktion in deinem Beispiel der xml Datei. Der Inhalt sieht für mich als Neuling nicht gerade einfach aus. Der Code ist recht umfangreich und komplex... Brauche ich eine Tabelle, wie in deinem Beispiel auch?

Reicht es nicht, einfach die von dir erwähnte Variable s in der XML zu speichern und beim laden wieder zu laden? Das müste doch eigentlich nicht so viel Code für eine Variable sein, oder?

Jedenfalls funktioniert dein Beispiel sehr gut, aber leider blicke ich immernoch nicht so recht durch, wie das mit den Druckernamen funktioniert...

Hier nochmal kurz der Code den ich zur Druckerauswahl und Anzeige in der Combobox verwende...

Die Sache mit dem Standarddrucker und der entsprechenden Labelanzeige und Seitenanzeige genötige ich eigentlich gar nicht, weiß aber auch nicht genau, wie ich es richtig entferne. (Es braucht eigentlich nur eine Auswahl der im System vorhandenen Drucker in der Combobox dagestellt werden und der zuletzt ausgewählte (aktivierte) soll gespeichert und beim nächsten Start wieder geladen werden...)


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim s As String
Dim i As Integer

With ComboBox1
For Each s In Printing.PrinterSettings.InstalledPrinters
.Items.Add(s)
'Index des Standarddruckers festhalten
'--------------------------------------
If CStr(ComboBox1.Items.Item(i)) = PrintDoc.PrinterSettings.PrinterName Then
j = i
End If
i += 1
Next s
If .Items.Count > 0 Then
'Standarddrucker markieren
'--------------------------
ComboBox1.SelectedIndex = j
Else
MessageBox.Show("Es ist kein Drucker installiert!", "Abbruch", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Me.Close()
End If
End With
PrintDoc.DocumentName = "Druckdokument"
AddHandler PrintDoc.PrintPage, AddressOf PrintDoc_PrintPage
iCurrPage = 0
End Sub

Private Sub Combobox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
If ComboBox1.SelectedIndex <> -1 Then
PrintDoc.PrinterSettings.PrinterName = ComboBox1.Text
End If
If ComboBox1.SelectedIndex = j Then
Label1.Visible = True
Else
Label1.Visible = False
End If
End Sub

Private Sub SelectPrinter(ByRef cboComboBox As ComboBox, ByRef strPrinterName As String)
Dim i As Integer
For i = 0 To cboComboBox.Items.Count - 1
If Convert.ToString(cboComboBox.Items(i)) = strPrinterName Then
cboComboBox.SelectedIndex = i
Exit For
End If
Next i
' Standarddrucker?
If i = j Then
Label1.Visible = True
Else
Label1.Visible = False
End If
End Sub
 
Zuletzt bearbeitet:
Hallo Matze,

ja du brauchst aus der Klasse nur die Sub SaveSetting und die Function
GetSetting. Den Rest kannst du links liegen lassen oder löschen.

Ich habe deinen Code mal angepasst.
Wird kein selbst ausgewählter Drucker gefunden, wird er Standarddrucker
selektiert. Wird einer gefunden d.h. es wurde vorher einer ausgewählt, dann
wird dieser selektiert.

Code:
Public Class Form1
    Private geladen As Boolean
    Private PrintDoc As New Printing.PrintDocument


    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim Standarddrucker As String

        With ComboBox1
            For Each s In Printing.PrinterSettings.InstalledPrinters
                .Items.Add(s)
                If s = PrintDoc.PrinterSettings.PrinterName Then
                    Standarddrucker = s
                End If
            Next s

            If .Items.Count > 0 Then
                '// Standarddrucker markieren
                '   aber nur wenn vorher kein Drucker von dir selektiert wurde

                Dim i As Integer = _
                    Me.ComboBox1.FindStringExact(clsSettings.GetSetting("ComboBox", "dein_Drucker", "DeineConfigDatei.xml"))

                If i = -1 Then
                    '// Standarddrucker setzen
                    i = Me.ComboBox1.FindStringExact(Standarddrucker)
                Else
                    '// eigener Drucker wurde gefunden
                End If

                Me.ComboBox1.SelectedIndex = i

            Else
                MessageBox.Show("Es ist kein Drucker installiert!", "Abbruch", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.Close()
            End If
        End With
        PrintDoc.DocumentName = "Druckdokument"

        AddHandler PrintDoc.PrintPage, AddressOf PrintDoc_PrintPage
        iCurrPage = 0


        geladen = True

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

        If geladen Then
            clsSettings.SaveSetting("ComboBox", "dein_Drucker", Me.ComboBox1.SelectedItem.ToString, "DeineConfigDatei.xml")
        End If


    End Sub
    
End Class

Gruß
Jens
 
Zurück