PDA

View Full Version : ورود به حالت ویرایش به محض ورود به سلول datagridview



patrick5053
پنج شنبه 05 مهر 1397, 12:52 عصر
سلام من با اینتر بین سلولهای دیتاگرد جابجا میشم که در کد نویسیش مشکلی ندارم.
مشکل اینجا هست که وقتی وارد یه سلول میشم میخوام اون سلول خودکار بره به حالت ویرایش
مشکل دوم وقتی در یک سلول در حالت ویرایش هستم و اینتر میزنم بره سلول بعدی با اولین اینتر اون سلول انتخاب میشه و از حالت ویرایش میاد بیرون و با اینتر دوم میره سلول بعدی که من میخوام با همون اینتر اول چه در حالت ویریایش در در حالت انتخاب بره سلول بعدی و اون سلول بعدی که وارد شد بره به حالت ویرایش
داخل پرانتز
من از کد beginedit در ورودی cells مورد نظم استفاده کردم جواب نداد
پیشاپیش تشکر میکنم از دوستان.

m.r226
پنج شنبه 05 مهر 1397, 13:29 عصر
https://stackoverflow.com/questions/40325386/datagridview-textbox-cell-editing-change-enter-key-to-act-like-tab

patrick5053
پنج شنبه 05 مهر 1397, 15:30 عصر
https://stackoverflow.com/questions/40325386/datagridview-textbox-cell-editing-change-enter-key-to-act-like-tab

این کد کلید اینتر رو به تب تبدیل میکنه که دارمش اینو
راه حل که جواب بده اگه دارن بدین ممنون

patrick5053
شنبه 07 مهر 1397, 11:23 صبح
این کد کلید اینتر رو به تب تبدیل میکنه که دارمش اینو
راه حل که جواب بده اگه دارن بدین ممنون

دوستان کسی راه حلی نداره؟

Mahmoud.Afrad
شنبه 07 مهر 1397, 19:12 عصر
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.editmode

patrick5053
یک شنبه 08 مهر 1397, 09:10 صبح
سلام دوستان من جواب این تایپیکم رو پدا کردم میزارم اینجا شاید به دردتون بخوره و استفاده کنید
اول خاصیت 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);
}
}
دقت کنید کلاس آخری که گذاشتم در خود همون فرم و در آخر فرم که کلاس فرم تموم میشه بزارید یعنی بعد از آخرین } که کلاس فرم تموم میشه
دقت بعدی در فرمهایی که به جز تکسباس تعریف کردید خطا میده که با کد نویسی بگید به جز اون سلولها در بقیه سلولها که تکس هستن اجرا کن
اگه لازم به توضیح بود بگید تا براتون توضیح بدم موفق باشید