3

イベントを使用しCellEndEditました。セルの値を編集した後、Enter キーを押すと、セルのフォーカスが下に移動します。

値を編​​集した元のセルにフォーカスを戻します。

いろいろ使いましたが失敗しました。

Private Sub DataGridVie1_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridVie1.CellEndEdit
   '...
   '....editing codes here...to input and validate values...
   '...
   '...
   '...before the End If of the procedure I put this values
   DataGridVie1.Rows(e.RowIndex).Cells(e.ColumnIndex).Selected = True
   DataGridVie1.CurrentCell = DataGridVie1.Rows(e.RowIndex).Cells(e.ColumnIndex)
   'DataGridVie1.BeginEdit(False) '''DID NOT apply this because it cause to edit again.
End If

編集後または ENTER KEY の後、フォーカスが編集された元のセルに戻ったときの実際のコードはわかりません。

ENTER キーを押すたびに、次のセルに直接移動するためです。

編集した元のセルにフォーカスを戻すコードは何ですか。

私はそのEditingControlShowing方法を知っていますが、私が望むものを得るためにその方法を使用する必要はないと思います.

4

2 に答える 2

7

これを試してください: 3 つの変数を定義します。1 つは編集操作が行われた場合に記憶するためのもので、残りの 2 つは最後に編集されたセルの行と列のインデックスを保存するためのものです。

Private flag_cell_edited As Boolean
Private currentRow As Integer
Private currentColumn As Integer

編集操作が発生すると、編集されたセルの座標を保存し、CellEndEditイベント ハンドラー内でフラグを true に設定します。

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    flag_cell_edited = True
    currentColumn = e.ColumnIndex
    currentRow = e.RowIndex
End Sub 

次に、SelectionChangedイベント ハンドラーでDataGridViewCurrentCellプロパティを最後に編集したセルに設定し、変数を使用しcurrentRowcurrentColumnデフォルトのセル フォーカスの変更を元に戻します。

Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
    If flag_cell_edited Then
        DataGridView1.CurrentCell = DataGridView1(currentColumn, currentRow)
        flag_cell_edited = False
    End If
End Sub
于 2013-07-07T13:54:28.447 に答える