作成日: 2018/08/24 最終更新日: 2018/08/24
文書種別
制限事項
詳細
C1FlexGridのEditMaskは、String、ComboList、Double、Integer型など各種DataTypeのセルに対して設定することができます。このうちDoubleやInteger等の数値型セルでは、それ以外のデータ型セルとは異なり、入力可能な文字数は制限されず、マスク文字数以上の桁まで入力することが可能です。
回避方法
このような動作となるのは、入力時の組み込みエディタ(それぞれのデータ型に応じて用意された内部的なエディタ)として、数値型セルでは「数値入力専用のエディタ」が使用されるためです。
「数値入力専用エディタ」では仕様上、EditMaskは、編集時におけるデータの書式を指定するために用いられます。入力動作は.NETにおける数値指定書式に準じたものとなります。その結果、EditMaskを設定しても入力可能な桁数そのものは制限されないのです。
そのため、数値型セルで入力可能な桁数を制限するには、(文字数ではなく)入力可能な最大値を指定して独自の処理を実装する必要があります。
以下に、ValidateEditイベントを使用した制限処理のサンプルを記載します。ここでは入力可能な値を10000未満とすることで、4桁のみの入力を許可しています。
◎サンプルコード(VB)
◎サンプルコード(C#)
「数値入力専用エディタ」では仕様上、EditMaskは、編集時におけるデータの書式を指定するために用いられます。入力動作は.NETにおける数値指定書式に準じたものとなります。その結果、EditMaskを設定しても入力可能な桁数そのものは制限されないのです。
そのため、数値型セルで入力可能な桁数を制限するには、(文字数ではなく)入力可能な最大値を指定して独自の処理を実装する必要があります。
以下に、ValidateEditイベントを使用した制限処理のサンプルを記載します。ここでは入力可能な値を10000未満とすることで、4桁のみの入力を許可しています。
◎サンプルコード(VB)
Private Sub C1FlexGrid1_ValidateEdit(sender As Object, e As ValidateEditEventArgs) Handles C1FlexGrid1.ValidateEdit
If (e.Col = 1) Then
Dim editor = C1FlexGrid1.Editor
Dim result As Double
If Not editor is Nothing AndAlso editor.Text IsNot “” Then
Dim isOK As Boolean = Double.TryParse(editor.Text, result)
If (isOK AndAlso (result >= 10000)) Then
MessageBox.Show("10000未満の数を入力してください")
e.Cancel = True
End If
End If
End If
End Sub
If (e.Col = 1) Then
Dim editor = C1FlexGrid1.Editor
Dim result As Double
If Not editor is Nothing AndAlso editor.Text IsNot “” Then
Dim isOK As Boolean = Double.TryParse(editor.Text, result)
If (isOK AndAlso (result >= 10000)) Then
MessageBox.Show("10000未満の数を入力してください")
e.Cancel = True
End If
End If
End If
End Sub
◎サンプルコード(C#)
private void c1FlexGrid1_ValidateEdit(object sender, C1.Win.C1FlexGrid.ValidateEditEventArgs e)
{
if (e.Col == 1)
{
var editor = c1FlexGrid1.Editor;
double result;
if (!(editor == null) && (editor.Text != ""))
{
bool isOK = double.TryParse(editor.Text, out result);
if ((isOK
&& (result >= 10000)))
{
MessageBox.Show("10000未満の数を入力してください");
e.Cancel = true;
}
}
}
}
{
if (e.Col == 1)
{
var editor = c1FlexGrid1.Editor;
double result;
if (!(editor == null) && (editor.Text != ""))
{
bool isOK = double.TryParse(editor.Text, out result);
if ((isOK
&& (result >= 10000)))
{
MessageBox.Show("10000未満の数を入力してください");
e.Cancel = true;
}
}
}
}
旧文書番号
83167