|
■No90662 (魔界の仮面弁士) に追記 > private void dGView1_Leave(object sender, EventArgs e) > { > if (dGView1.DataSource != null && dGView1.CurrentRow.IsNewRow) > { > // データバインドしている場合、新規行にいるときにフォーカスを喪失すると > // 最終行に移動してしまうので、フォーカス喪失後に新規行に戻しておく > BeginInvoke(new MethodInvoker(() => dGView1.CurrentCell = dGView1[dGView1.CurrentCellAddress.X, dGView1.NewRowIndex])); > } > }
追記。
事前に範囲選択していた場合、上記実装だと CurrentCell プロパティを書き換えた時点で 選択状態が解除されてしまうので、わざわざ Leave イベントで対処しなくても済むような DataGridView 派生クラスを用意してみました。
public class CustomDataGridView : DataGridView { protected override void OnLeave(EventArgs e) { base.OnLeave(e); if (DataSource != null && CurrentRow.IsNewRow) { BeginInvoke(new MethodInvoker(() => SetCurrentCellAddressCore(CurrentCellAddress.X, NewRowIndex, false, false, false))); } } }
|