我不認爲你真的需要利用NewRowIndex
屬性。只需通過設置當前單元格開始編輯:
private void dgvList_CellEnter(object sender, DataGridViewCellEventArgs e)
{
dgvList.CurrentCell = dgvList[e.ColumnIndex, e.RowIndex];
dgvList.BeginEdit(true);
}
如果你想在單元格中的編輯模式去只爲新行,則:
private void dgvList_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex != dgvList.NewRowIndex)
return;
dgvList.CurrentCell = dgvList[e.ColumnIndex, e.RowIndex];
dgvList.BeginEdit(true);
}
編輯:如果你想在新行開始在keydown處於編輯模式時,那麼這是一個已經可用於datagridview的功能。您可以手動設置它像這樣:
dgvList.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
//or
dgvList.EditMode = DataGridViewEditMode.EditOnKeystroke;
如果你想在KEYDOWN僅適用於新行的單元格是在編輯模式下,那麼你將不得不覆蓋默認行爲,通過掛鉤KeyDown
事件,我相信在做圖形用戶界面時是一種不好的方法可能是這樣的:
初始化:dgvList.EditMode = DataGridViewEditMode.EditOnF2; //or whatever you prefer
覆蓋默認擅長於按鍵風格編輯。然後
private void dgvList_KeyDown(object sender, KeyEventArgs e)
{
if (dgvList.CurrentCell.RowIndex != dgvList.NewRowIndex)
return;
dgvList.BeginEdit(true);
}
爲什麼你首先處理newrowindex?只要將新行視爲正常行並正在編輯 – nawfal
將新行視爲正常行意味着什麼?我正在處理newrowindex,因爲只有當用戶輸入新行時,編輯模式纔會被觸發。你可能會發布一些代碼來顯示你的意思。謝謝! (ps。就像在Excel中一樣 - 如果按Enter鍵,光標跳到下一行,並且如果您開始寫入單元格進入編輯模式) – FreewareFire
我已經發布了代碼,請參閱我的第二個代碼塊。在excel中,如果按下輸入遊標只跳轉到下一行,它不會使單元處於編輯模式。只有當你開始輸入時纔會變成編輯模式。所以你不需要使用dgv輸入事件.. – nawfal