作成日: 2023/01/19 最終更新日: 2023/01/19
文書種別
使用方法
詳細
一般的にValidateEditイベントは「セル編集モードを終了する前に」発生しますが、コードによるカレントセル移動やテキストペースト時にも発生します。
現時点では、以下のようなケースでの発生が確認されています。
(A) 編集モードで、Enterキーを押下して非編集モードにしたとき
(B) 編集モードで、矢印キーでセル移動にしたとき
(C) 編集モードで、他のコントロールにフォーカスを移動にしたとき
(D) ボタン押下時などに、コードでカレントセルを移動したとき
(E) 非編集時に、クリップボードからテキストをペーストしたとき
(F) 編集モードで、ValidateEdit内でコードでカレントセルを移動したとき
(メモ)
・ケース(E)の場合、ペーストされた値をValidateEditイベントでは参照することはできません。またC1FlexGrid1.Editorはヌル(Nothig または null)になります。
※ケース(E)は特殊な例ですが、例えばペースト時にこのイベントを活用したいといった要望から実装されました。
・ケース(F)については、ValidateEditイベントの発生時にSelectメソッドを実行して他のセルに移動すると、同イベントが再帰的に呼び出され、例外が発生することがありますのでご注意ください。
※ver.4.5.20223.584で確認。
※入力値の検証結果によってカレントセルを移動したいといった場合、ValidateEditイベントの代わりにAfterEditイベントを使用する事を強くお薦めします。
一方、以下のようなケースではValidateEditイベントは発生しません。一般的には非編集モードでセル移動する場合です。
(G) 非編集モードで、矢印キーでセル移動したとき
(H) 非編集モードのとき、ボタン押下時などにコードでカレントセルを移動したとき
( I ) 編集モードで、クリップボードからテキストをペーストしたとき
(メモ)
・ケース( I )は、他のケースとは異なり編集モードでの動作です。
なお、各ケースの動作は次のようなコードを用いて確認できます。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Dim b As Boolean = False
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' グリッドの設定
C1FlexGrid1.AutoClipboard = True
End Sub
Private Sub C1FlexGrid1_ValidateEdit(sender As Object, e As ValidateEditEventArgs) Handles C1FlexGrid1.ValidateEdit
' 行、列、値、エディタの参照
Console.WriteLine($"ValidateEdit: row = {e.Row}, col = {e.Col}, value = {C1FlexGrid1(e.Row, e.Col)}, editor = {C1FlexGrid1.Editor Is Nothing}")
' エディタのテキストの参照
If Not (C1FlexGrid1.Editor Is Nothing) Then
Console.WriteLine("C1FlexGrid1.Editor.Text : " + C1FlexGrid1.Editor.Text)
End If
' Selectメソッドによるセル移動
If e.Row = 5 Then
C1FlexGrid1.Select(C1FlexGrid1.Row + 1, C1FlexGrid1.Col)
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
C1FlexGrid1.Select(C1FlexGrid1.Row + 1, C1FlexGrid1.Col)
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// グリッドの設定
c1FlexGrid1.AutoClipboard = true;
}
private void c1FlexGrid1_ValidateEdit(object sender, ValidateEditEventArgs e)
{
// 行、列、値、エディタの参照
Console.WriteLine($"ValidateEdit: row = {e.Row}, col = {e.Col}, value = {c1FlexGrid1[e.Row, e.Col]}, editor = {c1FlexGrid1.Editor == null}");
// エディタのテキストの参照
if (!(c1FlexGrid1.Editor == null))
{
Console.WriteLine(("c1FlexGrid1.Editor.Text : " + c1FlexGrid1.Editor.Text));
}
// Selectメソッドによるセル移動
if (e.Row == 5)
{
c1FlexGrid1.Select(c1FlexGrid1.Row + 1, c1FlexGrid1.Col);
}
}
private void button1_Click(object sender, EventArgs e)
{
c1FlexGrid1.Select(c1FlexGrid1.Row + 1, c1FlexGrid1.Col);
}
}
}