我说的是房产PageSettings.PrinterResolution
.根据MSDN,该属性具有setter
与属性相同的属性PrinterResolution.X
,即使我无法为其设置新值.该属性仍然包含它的早期值,而不是新分配的值.
PrintDocument pd = new PrintDocument();
//assigning a printer to `pd`, etc...
//premise: pd.DefaultPageSettings.PrinterResolution.X has currently the value 200
Run Code Online (Sandbox Code Playgroud)
现在我尝试为以下内容分配一个新int
值X
:
pd.DefaultPageSettings.PrinterResolution.X = 300;
Run Code Online (Sandbox Code Playgroud)
但检查后它的值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;
Run Code Online (Sandbox Code Playgroud)
那么为什么我不能设置属性的值呢?特别是为什么有记录,setter
即使它不是"可用的".
如果您查看参考源,PageSettings
您会看到PrinterResolution
始终从API重新请求(只要您不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;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,只要您不PageSettings.PrinterResolution
手动设置,PrinterResolution
每次访问PageSettings.PrinterResolution
getter时都会从API加载一个新实例.这个新实例X
再次包含原始值.您X
之前设置的实例将被丢弃.
至于为什么我对此不太了解.