[英]Can't assign new value to property
我說的是屬性PageSettings.PrinterResolution
。 根據MSDN,此屬性具有一個setter
,與屬性PrinterResolution.X
相同,盡管我無法PrinterResolution.X
設置新值。 該屬性仍包含其先前的值,而不是新分配的值。
PrintDocument pd = new PrintDocument();
//assigning a printer to `pd`, etc...
//premise: pd.DefaultPageSettings.PrinterResolution.X has currently the value 200
現在,我嘗試為X
分配一個新的int
值:
pd.DefaultPageSettings.PrinterResolution.X = 300;
但是在檢查了它的值之后pd.DefaultPageSettings.PrinterResolution.X
仍然包含200
。 我只是想出了分配新的PrinterResolution
與設定值對象X
和Y
到pd.DefaultPageSettings.PrinterResolution
的值更改為我的需求。
PrinterResolution changedRes = new PrinterResolution();
changedRes.X = 200;
changedRes.Y = 200;
pd.DefaultPageSettings.PrinterResolution = changedRes;
那么,為什么不能設置屬性的值? 尤其是為什么即使沒有“可用”,也為什么有記錄在案的setter
。
如果查看PageSettings
的引用源 , PageSettings
看到始終從API重新請求PrinterResolution
(只要您不手動設置PrinterResolution
屬性):
public PrinterResolution PrinterResolution {
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Process, ResourceScope.Process)]
get {
if (printerResolution == null) {
IntSecurity.AllPrintingAndUnmanagedCode.Assert();
IntPtr modeHandle = printerSettings.GetHdevmode();
IntPtr modePointer = SafeNativeMethods.GlobalLock(new HandleRef(this, modeHandle));
SafeNativeMethods.DEVMODE mode = (SafeNativeMethods.DEVMODE) UnsafeNativeMethods.PtrToStructure(modePointer, typeof(SafeNativeMethods.DEVMODE));
PrinterResolution result = PrinterResolutionFromMode(mode);
SafeNativeMethods.GlobalUnlock(new HandleRef(this, modeHandle));
SafeNativeMethods.GlobalFree(new HandleRef(this, modeHandle));
return result;
}
else
return printerResolution;
}
set {
printerResolution = value;
}
}
因此,只要您不手動設置PageSettings.PrinterResolution
,每次您訪問PageSettings.PrinterResolution
getter時, PageSettings.PrinterResolution
從API加載新的PrinterResolution
實例。 並且此新實例再次包含原始X
值。 您之前設置X
的實例將被丟棄。
至於為什么我還不了解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.