0

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 番目の列が編集コントロールを初期化する方法に何かあると思いますか?

4

1 に答える 1