作成日: 2019/08/08 最終更新日: 2020/02/25
文書種別
不具合
状況
修正済み
詳細
ディスプレイの表示スケールを変更しても、GcContainerコントロール上に配置したコントロールのキャプションが正しいサイズに更新されません。
例えば、表示スケールが100%のときにすべて表示されていたキャプションの文字列が、150%にすると途切れて表示されるようになります。
例えば、表示スケールが100%のときにすべて表示されていたキャプションの文字列が、150%にすると途切れて表示されるようになります。
回避方法
この問題はService Pack 5(v10.0.4005.2012)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 5より前のバージョンでは次の方法で回避可能です。
以下のように、GcContainerコントロールを継承してカスタマイズし、表示スケールに合わせてキャプションのサイズが変更されるようにします。
◎サンプルコード(VB)
◎サンプルコード(C#)
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
Service Pack 5より前のバージョンでは次の方法で回避可能です。
以下のように、GcContainerコントロールを継承してカスタマイズし、表示スケールに合わせてキャプションのサイズが変更されるようにします。
◎サンプルコード(VB)
Imports GrapeCity.Win.Containers
Public Class FixedGcContainer
Inherits GcContainer
Protected Overrides Sub ScaleControl(factor As SizeF, specified As BoundsSpecified)
MyBase.ScaleControl(factor, specified)
Dim form = Me.FindForm()
If form Is Nothing Then Return
If form.AutoScaleMode = AutoScaleMode.None Then Return
Dim scale As Single = 1
If form.AutoScaleMode = AutoScaleMode.Dpi Then
scale = form.CurrentAutoScaleDimensions.Width / 96
ElseIf form.AutoScaleMode = AutoScaleMode.Font Then
scale = factor.Width
End If
If scale = 1 Then Return
For Each c As Control In Me.Controls
Dim cf As CaptionFormat = Me.GetCaptionFormat(c)
If Not cf Is Nothing Then
cf.Size = cf.Size * scale
End If
Next
End Sub
End Class
Public Class FixedGcContainer
Inherits GcContainer
Protected Overrides Sub ScaleControl(factor As SizeF, specified As BoundsSpecified)
MyBase.ScaleControl(factor, specified)
Dim form = Me.FindForm()
If form Is Nothing Then Return
If form.AutoScaleMode = AutoScaleMode.None Then Return
Dim scale As Single = 1
If form.AutoScaleMode = AutoScaleMode.Dpi Then
scale = form.CurrentAutoScaleDimensions.Width / 96
ElseIf form.AutoScaleMode = AutoScaleMode.Font Then
scale = factor.Width
End If
If scale = 1 Then Return
For Each c As Control In Me.Controls
Dim cf As CaptionFormat = Me.GetCaptionFormat(c)
If Not cf Is Nothing Then
cf.Size = cf.Size * scale
End If
Next
End Sub
End Class
◎サンプルコード(C#)
using GrapeCity.Win.Containers;
public class FixedGcContainer : GcContainer
{
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
var form = this.FindForm();
if (form == null) return;
if (form.AutoScaleMode == AutoScaleMode.None) return;
float scale = 1;
if (form.AutoScaleMode == AutoScaleMode.Dpi)
{
scale = form.CurrentAutoScaleDimensions.Width / 96;
}
else if (form.AutoScaleMode == AutoScaleMode.Font)
{
scale = factor.Width;
}
if (scale == 1) return;
foreach (Control c in this.Controls)
{
CaptionFormat cf = this.GetCaptionFormat(c);
if (cf != null)
{
cf.Size = cf.Size * (int)scale;
}
}
}
}
public class FixedGcContainer : GcContainer
{
protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
base.ScaleControl(factor, specified);
var form = this.FindForm();
if (form == null) return;
if (form.AutoScaleMode == AutoScaleMode.None) return;
float scale = 1;
if (form.AutoScaleMode == AutoScaleMode.Dpi)
{
scale = form.CurrentAutoScaleDimensions.Width / 96;
}
else if (form.AutoScaleMode == AutoScaleMode.Font)
{
scale = factor.Width;
}
if (scale == 1) return;
foreach (Control c in this.Controls)
{
CaptionFormat cf = this.GetCaptionFormat(c);
if (cf != null)
{
cf.Size = cf.Size * (int)scale;
}
}
}
}
旧文書番号
84362