単一選択モード(SingleSelect)でフォーカス枠の右辺が表示されない

文書番号 : 39226     文書種別 : 不具合     登録日 : 2016/01/07     最終更新日 : 2016/02/12
文書を印刷する
対象製品
SPREAD for Windows Forms 7.0J
状況
修正済み
詳細
単一選択モード(SingleSelect)でフォーカス枠の右辺が表示されません。
拡張選択モード(ExtendedSelect)や複数選択モード(MultiSelect)でも同様の現象が発生します。

【手順】
1.新規フォームにSPREADを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
  --フォーカス枠の右辺が表示されません

【サンプルコード】
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' SPREADの設定
    FpSpread1.ActiveSheet.ColumnCount = 3
    FpSpread1.ActiveSheet.OperationMode = FarPoint.Win.Spread.OperationMode.SingleSelect
  End Sub
回避方法
Service Pack 6(v7.0.2019.2008)で修正済み。
Service Pack 6(v7.0.2019.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

FocusRendererプロパティに独自のレンダラを設定します。

【サンプルコード】
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Text = FpSpread1.ProductVersion

    ' SPREADの設定
    FpSpread1.ActiveSheet.ColumnCount = 3
    FpSpread1.ActiveSheet.OperationMode = FarPoint.Win.Spread.OperationMode.SingleSelect

    ' 対応策[1/2]:独自のレンダラの設定
    FpSpread1.FocusRenderer = New CustomFocusRenderer(FpSpread1)
  End Sub

  '''
  ''' 対応策[2/2]:独自のレンダラ
  '''

  Public Class CustomFocusRenderer
    Implements FarPoint.Win.Spread.IFocusIndicatorRenderer

    Private spread As FarPoint.Win.Spread.FpSpread

    Public Sub New(ByVal fs As FarPoint.Win.Spread.FpSpread)
      spread = fs
    End Sub

    Public Sub Paint(ByVal g As Graphics, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal left As Boolean, ByVal top As Boolean, ByVal right As Boolean, ByVal bottom As Boolean) Implements FarPoint.Win.Spread.IFocusIndicatorRenderer.Paint
      Dim xMin As Integer = spread.GetCellRectangle(0, 0, 0, 0).Left
      Dim xMax As Integer = spread.GetCellRectangle(0, 0, 0, spread.ActiveSheet.ColumnCount - 1).Left
      Using p As New Pen(Color.Black, 2)
        If x = xMin Then g.DrawLine(p, New Point(x + 1, y), New Point(x + 1, y + height))
        If x = xMax Then g.DrawLine(p, New Point(x + width - 1, y), New Point(x + width - 1, y + height))
        g.DrawLine(p, New Point(x, y), New Point(x + width, y))
        g.DrawLine(p, New Point(x, y + height), New Point(x + width, y + height))
      End Using
    End Sub
  End Class