سلام دوستان من جواب این تایپیکم رو پدا کردم میزارم اینجا شاید به دردتون بخوره و استفاده کنید
اول خاصیت EditMode دیتاگرایدتون رو روی EditOnEnter تنظیم کنید
بعد کدهارو در محل مربوطه که ذکر شده قرار دهید
private void dataGridView1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
DataGridViewTextBoxEditingControl a = (DataGridViewTextBoxEditingControl)sender;
//a.PreviewKeyDown -= PreviewKeyDownEventHandler (dataGridView1_PreviewKeyDown)
DataGridView s = (DataGridView)a.EditingControlDataGridView;
if (e.KeyCode == Keys.Enter)
{
int newRow;
int newColumn;
if (s.CurrentCell.ColumnIndex == s.ColumnCount - 1) // it's a last column, move to next row;
{
newRow = s.CurrentCell.RowIndex + 1;
newColumn = 0;
if (newRow == s.RowCount)
s.Rows.Add(1); // ADD new row or RETURN (depends of your purposes..)
}
else // just change current column. row is same
{
newRow = s.CurrentCell.RowIndex;
newColumn = s.CurrentCell.ColumnIndex + 1;
}
s.CurrentCell = s.Rows[newRow].Cells[newColumn];
}
}
کدهای بعدی
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {
DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
tb.PreviewKeyDown -= dataGridView1_PreviewKeyDown;
tb.PreviewKeyDown += dataGridView1_PreviewKeyDown;
}
و در آخر
class MyDataGridView : DataGridView {
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData == Keys.Enter) && (this.EditingControl != null))
{
return true;
}
//for the rest of the keys, proceed as normal
return base.ProcessCmdKey(ref msg, keyData);
}
}
دقت کنید کلاس آخری که گذاشتم در خود همون فرم و در آخر فرم که کلاس فرم تموم میشه بزارید یعنی بعد از آخرین } که کلاس فرم تموم میشه
دقت بعدی در فرمهایی که به جز تکسباس تعریف کردید خطا میده که با کد نویسی بگید به جز اون سلولها در بقیه سلولها که تکس هستن اجرا کن
اگه لازم به توضیح بود بگید تا براتون توضیح بدم موفق باشید