2010-11-26 7 views
3

설정 파일 PrinterSettings 및 PageSettings에서 계속 유지할 수있는 것처럼 보이며 Serializable 등입니다. 내 PageSettings 및 여백을 유지하려고 할 때까지 모든 것이 OK로 진행되었습니다. 매번 마진을 변경하고 설정을 저장 한 다음 다시 PageSetupDialog.PageSettings로 다시로드합니다.이 설정은 수정되었습니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까? 드라이버 나 Windows가하는 일입니까? 그 기괴한, 아래 참조 :예기치 않게 PageSetting이 계속 수정 됨

MySettings.Default.pageSettings = psd.PageSettings; 
: 다음 변경 사항을 저장

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

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

alt text

내가 수동으로

5로 값을 변경 : 여기

내가 대화 상자를 표시

대화 상자를 새로 고침하고 설정 fi에서 설정을로드하면 르 값이 2로 변경되었습니다!?

alt text

UPDATE :

그러니 그냥 시도하고 문제에 확장 - 우리 모두 마진 10있는 기본 설정 값이 처음으로 PageSetupDialog를 표시합니다.

alt text

그래서 그들은 모두 (100), 이상하지만 대화는 말한다처럼 10mm 추천 즉, 수를 예상, 그래서 돈 '우리가 디버깅하는 동안 값을 검사 할 경우, 우리는 그들과 같이 표현 참조 어떤 측정 단위 100이 무엇인지에 대해 알고 있지만 어쨌든 대화 상자에서 10과 상관 관계가 있다고 가정합니다.

우리는 다음 대화하고 확인을 누릅니다 5에 모든 편집 - 그래서 우리는이 코드 과거를 얻을 :

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

그래서 우리는 몇 가지 값을 볼 수 pageSettingDialog 개체의 검사에 보여야하는데 마진은 모두 5 점 (또는 50 점은 10 점에서 100 점까지의 혼란의 경우와 같음).

alt text

낮은 그것은 우리가 어떤 이상한 이유로 20입니다, 기대했던하지 무엇을 보라 : 이제 다음 개체를 살펴 보자. 그게 내가 붙어있는 곳이야, 여기서 뭐하고있는 일을 해결할 수 없어. 50에서 20으로 변경되는 이유는 무엇입니까? 왜 내가 설정 한 가치를 지키지 않습니까? 조금 더 잘 설명해 주길 바랍니다.

+0

Visual Studio에서 (디버그)를 실행하거나 Windows 탐색기에서 exe를 실행할 때만 발생합니까? – decyclone

+0

디버그와 exe에서 모두 발생합니다. – Vidar

+0

원래 게시물이 변경되었습니다. – Vidar

답변

4

여백 값은 백분의 1 인치이며 기본값은 100 (= 1 인치)입니다. 5mm는 0.196845455 인치이고 0.20으로 반올림됩니다. 0.20 배 100은 20입니다. this article on MSDN.

디버그 세션 중에 표시되는 내용을 설명합니다. 귀하의 대화에 관해서는, 나는 문화적 이슈가 진행되고 있다고 생각합니다. 시간이 있으면이 부분을 더 살펴볼 것입니다. 그러나 지금은 이것이 당신을 조금 더 도울 수 있기를 바랍니다.

확인 편집은 내가 어떻게 생각하는지 대화가 대화를 떠날 때 메트릭 변환하지만, 열 때 그것을하지 않습니다. 대화 상자를 열 때 값을 변환하여 해결 방법을 만들 수 있다고 생각합니다. 이런 식으로 뭔가 :

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); 
} 

귀하의 PageSetupDialog를도 또한 문제를 해결해야 EnableMetric 속성이 있습니다. 나는 이것을 시험하지 않았다. here을 참조하십시오.

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

메트릭을 사용하는 간단한 경우입니다. 결코 그 설정이나 그 의미를 알지도 못했습니다. 그것이 blindingly 명백한 것처럼 보이더라도 그것을 지적하기를위한 감사합니다! – Vidar

0

우리는 더 이상 코드를 볼 필요가 없으므로 "최상의 추측"을 할 것입니다.

제 생각에는 대화 상자가 열려있을 때 코드가 2의 값을 설정하고 있다는 것입니다. 설정은 5로 저장되지만 하드 코딩 된 설정으로 인해 대화 상자에 2가 표시됩니다. 대화 상자 디스플레이에 설정 값을 무시하는 것이 없어야합니다.

또는 양식을 저장할 때 값을 무시하는 것이 있습니다.

설정을 보면 코드를 읽고 코드에 코드를 작성하여 코드에 하드 코드 된 "2"가 있는지 확인하십시오.

+0

원래 게시물이 변경되었습니다. – Vidar

관련 문제