作成日: 2017/02/16 最終更新日: 2017/05/17
文書種別
不具合
状況
修正済み
詳細
C1FlexGridで、列のDataType = typeof(double)を設定している場合、既存の負数を、さらに負数で上書きしようとして「-」を入力すると、数字全体が選択状態になります。続いて数値を入力すると、「-」のつかない正の数として表示されます。
回避方法
この問題はバージョン4.0.20171.260で修正されました。
※ .NET Framework 2.0用アセンブリはメンテナンスモードに移行したため、C1.Win.C1xxxx.2.dllでの修正は行われません。
.NET Framework 4.0用アセンブリ(C1.Win.C1xxxx.4.dll)をご利用ください。
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は、次の通りです。
KeyDown、StartEdit、KeyDownEditイベントを使用して、入力されたキーが「-」キーかどうかを判定し、正しく処理するコードを追加します。
◎サンプルコード(VB)
◎サンプルコード(C#)
※ .NET Framework 2.0用アセンブリはメンテナンスモードに移行したため、C1.Win.C1xxxx.2.dllでの修正は行われません。
.NET Framework 4.0用アセンブリ(C1.Win.C1xxxx.4.dll)をご利用ください。
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は、次の通りです。
KeyDown、StartEdit、KeyDownEditイベントを使用して、入力されたキーが「-」キーかどうかを判定し、正しく処理するコードを追加します。
◎サンプルコード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitializeMainFg()
End Sub
Private Sub InitializeMainFg()
Me.MainC1FlexGrid.Styles.Add("st")
MainC1FlexGrid.Styles("st").BackColor = System.Drawing.Color.White
MainC1FlexGrid.Styles("st").DataType = GetType(Double)
MainC1FlexGrid.Styles("st").TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.RightCenter
'MainC1FlexGrid.Styles["st"].Format = "#,##0.00";
MainC1FlexGrid.Cols(0).Style = MainC1FlexGrid.Styles("st")
MainC1FlexGrid.Cols(1).Style = MainC1FlexGrid.Styles("st")
MainC1FlexGrid.Cols(2).Style = MainC1FlexGrid.Styles("st")
End Sub
Dim isMinusKey As Boolean = False
Dim oldValue As System.Nullable(Of Double) = Nothing
Private Sub MainC1FlexGrid_KeyDown(sender As Object, e As KeyEventArgs) Handles MainC1FlexGrid.KeyDown
isMinusKey = False
If e.KeyCode = Keys.OemMinus Or e.KeyCode = Keys.Subtract Then
isMinusKey = True
End If
End Sub
Private Sub MainC1FlexGrid_StartEdit(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles MainC1FlexGrid.StartEdit
Dim value = MainC1FlexGrid(e.Row, e.Col)
If TypeOf value Is Double AndAlso CDbl(value) < 0 AndAlso isMinusKey Then
isMinusKey = False
oldValue = CDbl(value)
MainC1FlexGrid(e.Row, e.Col) = ""
End If
End Sub
Private Sub MainC1FlexGrid_KeyDownEdit(sender As Object, e As C1.Win.C1FlexGrid.KeyEditEventArgs) Handles MainC1FlexGrid.KeyDownEdit
If e.KeyCode = Keys.Escape AndAlso oldValue.HasValue Then
MainC1FlexGrid(e.Row, e.Col) = oldValue.Value
oldValue = Nothing
End If
End Sub
InitializeMainFg()
End Sub
Private Sub InitializeMainFg()
Me.MainC1FlexGrid.Styles.Add("st")
MainC1FlexGrid.Styles("st").BackColor = System.Drawing.Color.White
MainC1FlexGrid.Styles("st").DataType = GetType(Double)
MainC1FlexGrid.Styles("st").TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.RightCenter
'MainC1FlexGrid.Styles["st"].Format = "#,##0.00";
MainC1FlexGrid.Cols(0).Style = MainC1FlexGrid.Styles("st")
MainC1FlexGrid.Cols(1).Style = MainC1FlexGrid.Styles("st")
MainC1FlexGrid.Cols(2).Style = MainC1FlexGrid.Styles("st")
End Sub
Dim isMinusKey As Boolean = False
Dim oldValue As System.Nullable(Of Double) = Nothing
Private Sub MainC1FlexGrid_KeyDown(sender As Object, e As KeyEventArgs) Handles MainC1FlexGrid.KeyDown
isMinusKey = False
If e.KeyCode = Keys.OemMinus Or e.KeyCode = Keys.Subtract Then
isMinusKey = True
End If
End Sub
Private Sub MainC1FlexGrid_StartEdit(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles MainC1FlexGrid.StartEdit
Dim value = MainC1FlexGrid(e.Row, e.Col)
If TypeOf value Is Double AndAlso CDbl(value) < 0 AndAlso isMinusKey Then
isMinusKey = False
oldValue = CDbl(value)
MainC1FlexGrid(e.Row, e.Col) = ""
End If
End Sub
Private Sub MainC1FlexGrid_KeyDownEdit(sender As Object, e As C1.Win.C1FlexGrid.KeyEditEventArgs) Handles MainC1FlexGrid.KeyDownEdit
If e.KeyCode = Keys.Escape AndAlso oldValue.HasValue Then
MainC1FlexGrid(e.Row, e.Col) = oldValue.Value
oldValue = Nothing
End If
End Sub
◎サンプルコード(C#)
public partial class MainForm : Form
{
private bool isKeyDown;
public MainForm()
{
InitializeComponent();
InitializeMainFg();
}
private void InitializeMainFg()
{
this.MainC1FlexGrid.Styles.Add("st");
MainC1FlexGrid.Styles["st"].BackColor = System.Drawing.Color.White;
MainC1FlexGrid.Styles["st"].DataType = typeof(double);
MainC1FlexGrid.Styles["st"].TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.RightCenter;
//MainC1FlexGrid.Styles["st"].Format = "#,##0.00";
MainC1FlexGrid.Cols[0].Style = MainC1FlexGrid.Styles["st"];
MainC1FlexGrid.Cols[1].Style = MainC1FlexGrid.Styles["st"];
MainC1FlexGrid.Cols[2].Style = MainC1FlexGrid.Styles["st"];
}
bool isMinusKey = false;
double? oldValue = null;
private void MainC1FlexGrid_KeyDown(object sender, KeyEventArgs e)
{
isMinusKey = false;
if (e.KeyCode == Keys.OemMinus | e.KeyCode == Keys.Subtract)
isMinusKey = true;
}
private void MainC1FlexGrid_StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
var value = MainC1FlexGrid[e.Row, e.Col];
if (value is double && (double)value < 0 && isMinusKey)
{
isMinusKey = false;
oldValue = (double)value;
MainC1FlexGrid[e.Row, e.Col] = "";
}
}
private void MainC1FlexGrid_KeyDownEdit(object sender, C1.Win.C1FlexGrid.KeyEditEventArgs e)
{
if(e.KeyCode == Keys.Escape && oldValue.HasValue)
{
MainC1FlexGrid[e.Row, e.Col] = oldValue.Value;
oldValue = null;
}
}
}
{
private bool isKeyDown;
public MainForm()
{
InitializeComponent();
InitializeMainFg();
}
private void InitializeMainFg()
{
this.MainC1FlexGrid.Styles.Add("st");
MainC1FlexGrid.Styles["st"].BackColor = System.Drawing.Color.White;
MainC1FlexGrid.Styles["st"].DataType = typeof(double);
MainC1FlexGrid.Styles["st"].TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.RightCenter;
//MainC1FlexGrid.Styles["st"].Format = "#,##0.00";
MainC1FlexGrid.Cols[0].Style = MainC1FlexGrid.Styles["st"];
MainC1FlexGrid.Cols[1].Style = MainC1FlexGrid.Styles["st"];
MainC1FlexGrid.Cols[2].Style = MainC1FlexGrid.Styles["st"];
}
bool isMinusKey = false;
double? oldValue = null;
private void MainC1FlexGrid_KeyDown(object sender, KeyEventArgs e)
{
isMinusKey = false;
if (e.KeyCode == Keys.OemMinus | e.KeyCode == Keys.Subtract)
isMinusKey = true;
}
private void MainC1FlexGrid_StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
var value = MainC1FlexGrid[e.Row, e.Col];
if (value is double && (double)value < 0 && isMinusKey)
{
isMinusKey = false;
oldValue = (double)value;
MainC1FlexGrid[e.Row, e.Col] = "";
}
}
private void MainC1FlexGrid_KeyDownEdit(object sender, C1.Win.C1FlexGrid.KeyEditEventArgs e)
{
if(e.KeyCode == Keys.Escape && oldValue.HasValue)
{
MainC1FlexGrid[e.Row, e.Col] = oldValue.Value;
oldValue = null;
}
}
}
旧文書番号
81985