リサイズコンポーネントでSPREADのリサイズ時に発生する問題を回避するリサイズポリシー

文書番号 : 35626     文書種別 : 使用方法     登録日 : 2013/02/28     最終更新日 : 2013/02/28
文書を印刷する
対象製品
PlusPak for Windows Forms 7.0J
詳細
リサイズコンポーネント(GcResize)を使用して、SPREADグリッドをリサイズする場合、下記の問題が発生します。

  • グリッドの行と列がコントロールに合わせてサイズ変更されない

本現象は、以下のコードを使用してユーザー定義のリサイズポリシーを追加することで対応できます。
なお、本現象はリサイズパネル(GcResizePanel)でも発生しますが、同じ方法で対応できます。

ユーザー定義のリサイズポリシーの使い方については、製品ヘルプの以下の内容をご参照ください。

PowerTools PlusPak for Windows Forms 7.0J
 - PlusPak の使い方
  - レイアウト
   - GcResize コンポーネント
    - リサイズポリシー

[Visual Basic]
Imports GrapeCity.Win.Components
Imports FarPoint.Win.Spread

Public Class SpreadResizePolicy
  Inherits ResizePolicy

  Public Overrides ReadOnly Property TargetType() As Type
    Get
      Return GetType(FpSpread)
    End Get
  End Property

  Public Overrides Function CanResizeChildren(control As Control) As Boolean
    Return False
  End Function

  Public Overrides Sub ResizeLayout(control As Control, infos As ResizeLayoutInfo)
    Try
      Dim spread As FpSpread = TryCast(control, FpSpread)
      If spread IsNot Nothing AndAlso spread.Sheets.Count > 0 Then
        ' resize each SheetView by it's ZoomFactor.
        For Each sheet As SheetView In spread.Sheets
          sheet.ZoomFactor = CSng(Math.Max(infos.TargetFactorX, infos.TargetFactorY))
        Next
      End If
    Catch generatedExceptionName As Exception
    End Try
    MyBase.ResizeLayout(control, infos)
  End Sub

  Public Overrides Sub ResizeFont(control As Control, infos As ResizeFontInfo)
    control.Font = New Font(control.Font.FontFamily, infos.OriginalFontSize, control.Font.Style, control.Font.Unit, control.Font.GdiCharSet, control.Font.GdiVerticalFont)
  End Sub
End Class


[C#]
using GrapeCity.Win.Components;
using FarPoint.Win.Spread;

public class DemoSpreadResizePolicy : ResizePolicy
{
  public override Type TargetType
  {
    get { return typeof(FpSpread); }
  }

  public override bool CanResizeChildren(Control control)
  {
    return false;
  }

  public override void ResizeLayout(Control control, ResizeLayoutInfo infos)
  {
    try
    {
      FpSpread spread = control as FpSpread;
      if (spread != null && spread.Sheets.Count > 0)
      {
        // resize each SheetView by it's ZoomFactor.
        foreach (SheetView sheet in spread.Sheets)
        {
          sheet.ZoomFactor = (Single)Math.Max(infos.TargetFactorX, infos.TargetFactorY);
        }
      }
    }
    catch (Exception)
    {
    }
    base.ResizeLayout(control, infos);
  }

  public override void ResizeFont(Control control, ResizeFontInfo infos)
  {
    control.Font = new Font(control.Font.FontFamily, infos.OriginalFontSize, control.Font.Style, control.Font.Unit, control.Font.GdiCharSet, control.Font.GdiVerticalFont);
  }
}


制限事項
水平か垂直方向の片方のみリサイズしても行の高さと列の幅が同時にサイズ変更します。これはZoomFactorによる動作です。
関連情報