作成日: 2013/12/03 最終更新日: 2014/03/31
文書種別
不具合
状況
修正済み
詳細
アンバウンドモードにおいて、IEの表示倍率を100%以外に設定すると、列をリサイズした際に選択している列の列幅が不正に広がってしまいます。
5.0.20132.352以降のバージョンでのみ問題が発生します。
5.0.20132.352以降のバージョンでのみ問題が発生します。
回避方法
この問題はバージョン5.0.20133.377で修正されました。
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです。
IEの表示倍率が100%より大きい場合は、ClassFactoryを使用して列のリサイズ処理をカスタマイズすることで、問題を回避することができます。
表示倍率が100%より小さい場合は、問題を回避することができません。
◎サンプルコード (Visual Basic)
◎サンプルコード (C#)
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです。
IEの表示倍率が100%より大きい場合は、ClassFactoryを使用して列のリサイズ処理をカスタマイズすることで、問題を回避することができます。
表示倍率が100%より小さい場合は、問題を回避することができません。
◎サンプルコード (Visual Basic)
c1FlexGrid1.CellFactory = New MyCellFactory()
Public Class MyCellFactory
Inherits CellFactory
Private val As Double
Private hitTestcolumn As Integer
Private lfBtnStatus As Boolean = False
Private currentCellType As CellType
Private _grid As C1FlexGrid
Public Overrides Sub ApplyCellStyles(grid As C1FlexGrid, cellType As CellType, rng As CellRange, bdr As Border)
MyBase.ApplyCellStyles(grid, cellType, rng, bdr)
If _grid Is Nothing Then
_grid = grid
AddHandler _grid.ResizingColumn, AddressOf _grid_ResizingColumn
AddHandler _grid.MouseMove, AddressOf _grid_MouseMove
AddHandler _grid.PreviewMouseLeftButtonDown, AddressOf _grid_PreviewMouseLeftButtonDown
AddHandler _grid.MouseLeftButtonUp, AddressOf _grid_MouseLeftButtonUp
End If
End Sub
Private Sub _grid_PreviewMouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)
lfBtnStatus = True
currentCellType = _grid.HitTest(e.GetPosition(_grid)).CellType
hitTestcolumn = _grid.HitTest(e.GetPosition(_grid)).Column
End Sub
Private Sub _grid_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs)
lfBtnStatus = False
End Sub
Private Sub _grid_MouseMove(sender As Object, e As MouseEventArgs)
If lfBtnStatus Then
val = e.GetPosition(_grid).X
End If
End Sub
Private Sub _grid_ResizingColumn(sender As Object, e As CellRangeEventArgs)
e.Cancel = True
If e.CellType = CellType.ColumnHeader Then
Dim fnlColumnWidth As Double = val - _grid.Columns(e.Column).Left - _grid.TopLeftCells.Columns(0).ActualWidth
If fnlColumnWidth > _grid.Columns(e.Column).MinWidth Then
_grid.Columns(e.Column).Width = New GridLength(fnlColumnWidth)
End If
ElseIf e.CellType = CellType.TopLeft Then
_grid.TopLeftCells.Columns(0).Width = New GridLength(val)
End If
End Sub
End Class
Public Class MyCellFactory
Inherits CellFactory
Private val As Double
Private hitTestcolumn As Integer
Private lfBtnStatus As Boolean = False
Private currentCellType As CellType
Private _grid As C1FlexGrid
Public Overrides Sub ApplyCellStyles(grid As C1FlexGrid, cellType As CellType, rng As CellRange, bdr As Border)
MyBase.ApplyCellStyles(grid, cellType, rng, bdr)
If _grid Is Nothing Then
_grid = grid
AddHandler _grid.ResizingColumn, AddressOf _grid_ResizingColumn
AddHandler _grid.MouseMove, AddressOf _grid_MouseMove
AddHandler _grid.PreviewMouseLeftButtonDown, AddressOf _grid_PreviewMouseLeftButtonDown
AddHandler _grid.MouseLeftButtonUp, AddressOf _grid_MouseLeftButtonUp
End If
End Sub
Private Sub _grid_PreviewMouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)
lfBtnStatus = True
currentCellType = _grid.HitTest(e.GetPosition(_grid)).CellType
hitTestcolumn = _grid.HitTest(e.GetPosition(_grid)).Column
End Sub
Private Sub _grid_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs)
lfBtnStatus = False
End Sub
Private Sub _grid_MouseMove(sender As Object, e As MouseEventArgs)
If lfBtnStatus Then
val = e.GetPosition(_grid).X
End If
End Sub
Private Sub _grid_ResizingColumn(sender As Object, e As CellRangeEventArgs)
e.Cancel = True
If e.CellType = CellType.ColumnHeader Then
Dim fnlColumnWidth As Double = val - _grid.Columns(e.Column).Left - _grid.TopLeftCells.Columns(0).ActualWidth
If fnlColumnWidth > _grid.Columns(e.Column).MinWidth Then
_grid.Columns(e.Column).Width = New GridLength(fnlColumnWidth)
End If
ElseIf e.CellType = CellType.TopLeft Then
_grid.TopLeftCells.Columns(0).Width = New GridLength(val)
End If
End Sub
End Class
◎サンプルコード (C#)
c1FlexGrid1.CellFactory = new MyCellFactory();
public class MyCellFactory : CellFactory
{
double val;
int hitTestcolumn;
bool lfBtnStatus = false;
CellType currentCellType;
C1FlexGrid _grid;
public override void ApplyCellStyles(C1FlexGrid grid, CellType cellType, CellRange rng, Border bdr)
{
base.ApplyCellStyles(grid, cellType, rng, bdr);
if (_grid == null)
{
_grid = grid;
_grid.ResizingColumn += new EventHandler(_grid_ResizingColumn);
_grid.MouseMove += new MouseEventHandler(_grid_MouseMove);
_grid.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_grid_PreviewMouseLeftButtonDown);
_grid.MouseLeftButtonUp += new MouseButtonEventHandler(_grid_MouseLeftButtonUp);
}
}
void _grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
lfBtnStatus = true;
currentCellType = _grid.HitTest(e.GetPosition(_grid)).CellType;
hitTestcolumn = _grid.HitTest(e.GetPosition(_grid)).Column;
}
void _grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
lfBtnStatus = false;
}
void _grid_MouseMove(object sender, MouseEventArgs e)
{
if (lfBtnStatus)
val = e.GetPosition(_grid).X;
}
void _grid_ResizingColumn(object sender, CellRangeEventArgs e)
{
e.Cancel = true;
if (e.CellType == CellType.ColumnHeader)
{
double fnlColumnWidth = val - _grid.Columns[e.Column].Left - _grid.TopLeftCells.Columns[0].ActualWidth;
if (fnlColumnWidth > _grid.Columns[e.Column].MinWidth)
_grid.Columns[e.Column].Width = new GridLength(fnlColumnWidth);
}
else if (e.CellType == CellType.TopLeft)
{
_grid.TopLeftCells.Columns[0].Width = new GridLength(val);
}
}
}
public class MyCellFactory : CellFactory
{
double val;
int hitTestcolumn;
bool lfBtnStatus = false;
CellType currentCellType;
C1FlexGrid _grid;
public override void ApplyCellStyles(C1FlexGrid grid, CellType cellType, CellRange rng, Border bdr)
{
base.ApplyCellStyles(grid, cellType, rng, bdr);
if (_grid == null)
{
_grid = grid;
_grid.ResizingColumn += new EventHandler
_grid.MouseMove += new MouseEventHandler(_grid_MouseMove);
_grid.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_grid_PreviewMouseLeftButtonDown);
_grid.MouseLeftButtonUp += new MouseButtonEventHandler(_grid_MouseLeftButtonUp);
}
}
void _grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
lfBtnStatus = true;
currentCellType = _grid.HitTest(e.GetPosition(_grid)).CellType;
hitTestcolumn = _grid.HitTest(e.GetPosition(_grid)).Column;
}
void _grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
lfBtnStatus = false;
}
void _grid_MouseMove(object sender, MouseEventArgs e)
{
if (lfBtnStatus)
val = e.GetPosition(_grid).X;
}
void _grid_ResizingColumn(object sender, CellRangeEventArgs e)
{
e.Cancel = true;
if (e.CellType == CellType.ColumnHeader)
{
double fnlColumnWidth = val - _grid.Columns[e.Column].Left - _grid.TopLeftCells.Columns[0].ActualWidth;
if (fnlColumnWidth > _grid.Columns[e.Column].MinWidth)
_grid.Columns[e.Column].Width = new GridLength(fnlColumnWidth);
}
else if (e.CellType == CellType.TopLeft)
{
_grid.TopLeftCells.Columns[0].Width = new GridLength(val);
}
}
}
旧文書番号
80624