2 つの datagridview 列があります。この記事で説明されているカスタム MaskedTextBox 列タイプを使用した開始日と終了日: http://www.codeproject.com/Articles/26005/DataGridViewColumn-Hosting-MaskedTextBox
ここで、ユーザーが列に有効な日付を入力したときに、同じ行の次のセルに編集フォーカスを自動的に移動したいと考えています。
この MaskedTextBox 列が機能する方法は、OnTextChanged()イベントで .Text 値を DateTime に変換しようとすることです。それが例外なく発生した場合は、その DateTime 値を DataGridView.CurrentCell.Value に割り当てます。
次に、次のようにDataGridView.CellValueChangedイベントを使用して次のセルに移動しようとします。
private void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == -1 || e.RowIndex == -1)
return;
//Move to next cell on the same row
if (myDataGridView.Columns[e.ColumnIndex].ValueType.Equals(typeof(DateTime)))
{
try
{
myDataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);
int NewColIndex = myDataGridView.CurrentCell.ColumnIndex + 1;
if (NewColIndex > -1 && NewColIndex < myDataGridView.Columns.Count)
myDataGridView.CurrentCell = myDataGridView[NewColIndex, myDataGridView.CurrentCell.RowIndex];
}
catch
{
}
}
}
編集フォーカスは次の列/セルに変更されますが、 DataGridViewMaskedTextCellクラスのPositionEditingControl()メソッドから発生して、2 番目の列/セルに入力を開始すると NullReference 例外が発生します。
なぜそれが起こるのか誰か教えてもらえますか?
.CurrentCell を設定するよりも次のセルに移動する「より良い」方法はありますか?
編集: この問題は、2 番目の列でもこのカスタム editcontrol が使用されていることに関連しているようです。2番目の列として通常のTextBoxColumnで同じことを試してみましたが、うまくいきました。2 番目の列が編集コントロールを初期化する方法に何かあると思いますか?