2010-11-26 15 views
3

Es scheint, dass Sie in einer Einstellungsdatei PrinterSettings und auch PageSettings beibehalten können, sie sind Serializable usw. Großartig! Alles lief gut, bis ich versuchte, meine PageSettings und die Ränder beizubehalten. Jedes Mal, wenn ich die Ränder ändere, speichern Sie die Einstellungen und laden Sie sie dann erneut in die PageSetupDialog.PageSettings - sie wurden geändert. Weiß jemand, warum das passiert? Ist es etwas, das der Treiber oder Windows macht? Seine bizarre, siehe unten:PageSettings wird immer unerwartet geändert

Hier zeige ich den Dialog:

PageSetupDialog psd = new PageSetupDialog(); 
psd.PageSettings = MySettings.Default.pageSettings; 

    if (psd.ShowDialog() == DialogResult.OK) 

alt text

ich die Werte manuell ändern 5.

Dann speichere ich die Änderungen:

MySettings.Default.pageSettings = psd.PageSettings; 

Wenn ich den Dialog neu laden und laden Sie die Einstellungen aus den Einstellungen fi Die Werte haben sich in 2 geändert !?

alt text

UPDATE:

Also nur zu versuchen und das Problem zu erweitern - wenn wir die Pagesetup zum ersten Mal mit den Standardeinstellungen Werte zeigen, die 10 für alle Ränder sind. Wenn wir die Werte während des Debug-inspizieren dann sehen wir sie wie folgt dargestellt:

alt text

So sind sie alle 100, seltsam, aber ich erwartete, dass sie 10 also wie 10 mm sein, wie der Dialog sagt, so I don‘ Sie wissen, welche Maßeinheit 100 zu sein hat, aber nehmen wir an, dass sie im Dialog mit 10 korreliert.

Wir dann bearbeiten sie alle 5 im Dialog und drücken Sie OK - so erhalten wir hinter diesem Code:

if (psd.ShowDialog() == DialogResult.OK) 

so würden wir auf Inspektion des pageSettingDialog Objekt sehen erwarten, dass einige Werte für die sehen Ränder sind alle 5 (oder 50, wie es in der 10 gegen 100 Verwirrung der Fall zu sein scheint, siehe oben). Schauen wir uns das Objekt einen Blick dann:

alt text

Und siehe da, es ist nicht das, was wir erwartet hatten, es ist 20 aus irgendeinem bizarren Grund. Dort bleibe ich hängen, ich kann einfach nicht herausfinden, was hinter den Sehnsitzen hier vor sich geht. Warum ändert es sich von 50 auf 20? Warum hält es nicht den Wert, den ich eingestellt habe? Hoffe, dass es ein bisschen besser erklärt.

+0

Tritt dies nur auf, wenn Sie (Debug) von Visual Studio ausführen oder wenn Sie exe von Windows Explorer ausführen? – decyclone

+0

Es passiert sowohl in debug und exe. – Vidar

+0

Siehe meine Änderungen an der ursprünglichen Buchung. – Vidar

Antwort

4

Die Werte für die Ränder sind in Hundertstel eines Zolls mit einem Standardwert von 100 (= 1 Zoll). 5 mm entspricht 0,196845455 Zoll, die auf 0,20 runden. 0,2038 mal 100 ist gleich 20. Siehe this article on MSDN.

Dies erklärt, was Sie während Ihrer Debug-Sitzung sehen. Was Ihren Dialog betrifft, denke ich, dass ein kulturelles Problem besteht. Ich werde mir das genauer ansehen, wenn ich etwas Zeit habe, aber im Moment hoffe ich, dass dir das weiterhilft.

EDIT

Ok, was ich denke, passiert ist, dass der Dialog die Metriken umwandelt, wenn Sie den Dialog zu verlassen, aber tut es nicht beim Öffnen. Ich denke, dass Sie eine Abhilfe schaffen können, indem Sie Ihre Werte beim Öffnen des Dialogs konvertieren. Etwas wie folgt aus:

PageSetupDialog psd = new PageSetupDialog(); 
Margins currentMargins = MySettings.Default.pageSettings.Margins; 
psd.PageSettings.Margins = new Margins(
    ConvInchToMm(currentMargins.Left), ConvInchToMm(currentMargins.Right), 
    ConvInchToMm(currentMargins.Top), ConvInchToMm(currentMargins.Bottom)); 

private int ConvInchToMm(int hundrInch) 
{ 
    return (int)(hundrInch * 2.54); 
} 

Ihre Pagesetup hat auch eine EnableMetric Eigenschaft, die auch Ihre Probleme lösen sollte. Ich habe das allerdings nicht getestet. Siehe here.

PageSetupDialog psd = new PageSetupDialog(); 
psd.EnableMetric = true; 
+0

Es war nur ein einfacher Fall der Aktivierung von metrisch. Habe diese Einstellung oder ihre Auswirkungen nie bemerkt. Danke, dass du das gezeigt hast, obwohl es jetzt offensichtlich offensichtlich ist! – Vidar

0

Da wir keinen Code mehr haben, den wir uns ansehen können, gebe ich meine "beste Schätzung".

Mein Gedanke ist, dass Ihr Code den Wert 2 setzt, wenn der Dialog geöffnet wird. Die Einstellungen werden als 5 gespeichert, aber das Dialogfeld zeigt 2 wegen einer fest codierten Einstellung an. Stellen Sie sicher, dass das Lesen der Einstellung in der Dialoganzeige nicht überschrieben wird.

Alternativ zum Speichern des Formulars gibt es etwas, das den Wert überschreibt.

Schauen Sie in Ihren Einstellungen lesen Code und Ihre Einstellungen schreiben Code, um zu sehen, ob es eine "2" irgendwo in Ihrem Code fest codiert ist.

+0

Siehe meine Änderungen an der ursprünglichen Buchung. – Vidar

Verwandte Themen