Frage

Es scheint, dass Sie in einer Einstellungsdatei Printer und auch Pagesettings bestehen können, sind sie Serializable usw. Großartig! Alles ging in Ordnung, bis ich versuchte, meine Pagesettings und die Margen zu anhalten. Jedesmal, wenn ich die Ränder ändern, speichern Sie die Einstellungen und sie dann in die PageSetupDialog.PageSettings neu zu laden zurück - sie wurden geändert. Weiß jemand, warum dies geschieht? Ist es etwas, dass der Fahrer oder Windows tut? Sein bizarren, siehe unten:

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 zu 5 geändert werden.

Dann speichere ich die Änderungen:

MySettings.Default.pageSettings = psd.PageSettings;

Wenn ich den Dialog und die Last in den Einstellungen neu geladen von den Einstellungen die Werte haben sich geändert zu 2-Datei!?

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 werden:

alt text

So sie alle 100, seltsam, aber ich erwartete, dass sie 10 also sein, wie 10 mm wie der Dialog sagen, damit ich weiß nicht, was Maßeinheit 100 sein wird in Bezug aber trotzdem läßt vermuten, dass es mit 10 korreliert der Dialog.

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

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

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

alt text

Und siehe da, es ist nicht das, was wir erwartet hatten, ist es 20 aus irgendeinem bizarren Grund. Das ist, wo ich nicht weiterkommen, ich kann einfach nicht etwas ausrechnen hinter dem seens geht hier. Warum ändert es 50-20 ?, warum wird es nicht den Wert I set halten? Hoffnung, dass es ein bisschen besser erklärt.

War es hilfreich?

Lösung

Die Werte für Pannen sind in Hundertstel Inch, mit einem Standardwert von 100 (= 1 inch). 5 mm entspricht 0,196845455 Zoll, die auf 0,20 rundet. 0,20 mal 100 gleich 20. Siehe diesen Artikel auf MSDN .

Das erklärt, was Sie während Ihrer Debug-Sitzung sehen. Wie für Ihren Dialog, denke ich, dass eine kulturelle Frage los ist. Ich werde dies prüfen mehr, wenn ich etwas Zeit habe, aber jetzt hoffe ich das Sie ein wenig weiter helfen.

EDIT

Ok, was ich denke, passiert ist, dass der Dialog wandelt die Metriken, wenn Sie den Dialog zu verlassen, ihn aber nicht tun, wenn Öffnung. Ich denke, man kann eine Abhilfe schaffen, indem Sie Ihre Werte umzuwandeln, wenn der Dialog geöffnet wird. So 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 diese aber nicht getestet. Siehe hier .

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

Andere Tipps

Da wir keine mehr Code müssen schauen, ich werde es geben, meine „best guess“.

Mein Gedanke ist, dass der Code den Wert von 2 eingestellt wird, wenn der Dialog öffnet. Die Einstellungen werden gespeichert als 5 aber Dialog angezeigt wird 2 wegen einer fest codierten Einstellung. Stellen Sie sicher, dass es nichts Überschreiben der Lektüre der Einstellung im Dialoganzeige.

Alternativ auf das Formular zu speichern, gibt es zwingende etwas den Wert.

Schauen Sie in Ihren Einstellungen lesen Code und Ihre Einstellungen Code schreiben, um zu sehen, ob es eine „2“ überall fest einprogrammiert im Code ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top