[]
SPREADでは、高DPIのサポートが有効なアプリケーションにおいて、高DPI設定をサポートします。アプリケーションのDPIのサポートを有効にする方法については、Microsoft社のWebサイトを参照してください。
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>static class Program
{
/// <summary>
/// アプリケーションの主要なエントリポイントです。
/// </summary>
[STAThread]
static void Main()
{
SetProcessDPIAware();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
public extern static IntPtr SetProcessDPIAware();
}NotInheritable Class Program
Private Sub New()
End Sub
''' <summary>
''' アプリケーションのメイン エントリ ポイントです。
''' </summary>
<STAThread> _
Friend Shared Sub Main()
SetProcessDPIAware()
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(New MainForm())
End Sub
<System.Runtime.InteropServices.DllImport("user32.dll")> _
Friend Shared Function SetProcessDPIAware() As Boolean
End Function
End Class<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
</appSettings>
</configuration>OSのDPI設定を変更した場合、コントロールのサイズはDPIの設定に応じて拡大されますが、SPREADの行の高さや列幅は変更されません。SPREADのスケーリングを有効にすると、DPIに応じて行の高さや列幅が変更されるようにできます。SPREADのスケーリングを有効にするには、FpSpreadクラスのSpreadScaleModeプロパティを使用します。
!type=warning
注意:
300%までのスケーリングに対応しています。それより大きいサイズのスケーリングは、レイアウトが崩れる可能性があります。
実行時のみ高DPIをサポートします。デザイナを高DPI環境で使用した場合は、レイアウトが崩れる可能性があります。
SpreadScaleModeプロパティは、次のように設定します。
Visual Studioのデザイン画面でコンテナのAutoScaleModeプロパティをDPIに設定します。
※AutoScaleModeがDPI以外に設定されている場合、SPREADのSpreadScaleModeプロパティは正常に機能しません。
Visual Studioのデザイン画面でSPREADのSpreadScaleModeプロパティをZoomDpiSupportに変更します。
データ連結している場合、DataAutoSizeColumnsプロパティの設定が列幅に影響を及ぼす可能性があります。以下、SpreadScaleModeプロパティとの関係で、DPIの設定に応じてサイズが変更される要素を表しています。
設定による影響 | |||
|---|---|---|---|
SpreadScaleModeプロパティ | |||
ZoomDpiSupport | None(デフォルト) | ||
DataAutoSizeColumns プロパティ | True | 列幅および行高さ | 列幅のみ |
False | 列幅および行高さ | なし | |
※コントロールのサイズは設定値に関わらず拡大されます。
SPREADのスケーリングは、.NET Frameworkの自動スケーリング上で動作します。そのため、.NET Frameworkの自動スケーリングの動作を理解しておく必要があります。詳細は、次の情報を参照してください。
自動スケーリングは、フォームのロード時にのみ行われます。実行時では、コントロールのサイズや位置が変更された時点、およびコンテナのレイアウトが一時停止された時点で、スケーリングが変更される可能性があります。
レイアウトを一時停止します。
コントロールの位置とサイズを設定します。
SpreadScaleMode プロパティを ZoomDpiSupport に設定します。
ResumeLayout メソッドを使用して、変更を適用します。
次のサンプルコードは、SpreadScaleMode プロパティを ZoomDpiSupport に設定して、レイアウトを一時停止してから再開します。
fpSpread.SuspendLayout();
AutoScaleDimensions = new System.Drawing.SizeF(96.0F, 96.0F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
fpSpread1.Location = new System.Drawing.Point(23, 86);
fpSpread1.Size = new System.Drawing.Size(356, 161);
fpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport;
fpSpread1.ResumeLayout();FpSpread1.SuspendLayout()
AutoScaleDimensions = New System.Drawing.SizeF(96.0F, 96.0F)
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
FpSpread1.Location = New System.Drawing.Point(23, 86)
FpSpread1.Size = New System.Drawing.Size(356, 161)
FpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport
FpSpread1.ResumeLayout()DPIのサポートを有効化するには、次の手順を実行します。
.NET 4.8 Frameworkをインストールします。
新規のWindowsフォームアプリケーションを作成します。
以下の情報を使用して、App.configをWindowsフォームのルートディレクトリ(Program.csと同じディレクトリ)に追加します。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2"/>
<!-- 修正を適用しない場合は、各コメントを解除してください。 -->
<!--
<add key="Form.DisableSinglePassScalingOfDpiForms" value="true"/>
<add key="ToolStrip.DisableHighDpiImprovements" value="true"/>
<add key="CheckedListBox.DisableHighDpiImprovements" value="true"/>
<add key="MonthCalendar.DisableHighDpiImprovements" value="true"/>
<add key="AnchorLayout.DisableHighDpiImprovements" value="true"/>
<add key="DataGridView.DisableHighDpiImprovements" value="true"/>
-->
</System.Windows.Forms.ApplicationConfigurationSection>
</configuration>以下の情報を使用して、App.manifestをWindowsフォームのルートディレクトリ(Program.csと同じディレクトリ)に追加します。
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UACマニフェストオプション。Windowsユーザーアカウント制御レベルを変更する場合は、requestedExecutionLevelノードを、以下のいずれかに置換します。 -->
<!--
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
-->
<!-- requestedExecutionLevel要素を指定することで、ファイルおよびレジストリの仮想化を無効にします。下位互換性を維持するために、この仮想化がアプリケーションに必要となる場合は、この要素を削除します。 -->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- このアプリケーションがテスト済みであり、使用が想定されるWindowsバージョンのリスト。適切な要素をコメント解除すると、Windowsは最も互換性の高い環境を自動選択します。 -->
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
</assembly>Program.csに、以下の設定が含まれていることを確認します。
static class Program
{
// <summary>
// アプリケーションのメインのエントリポイントです。
// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}Form1.designer.csに、以下の設定が含まれていることを確認します。
this.fpSpread1.SpreadScaleMode = FarPoint.Win.Spread.ScaleMode.ZoomDpiSupport;
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;