PDA

View Full Version : حرکت به جلو (سلول بعدی) با زدن کلید Enter در DataGridView



Happy_davood
پنج شنبه 05 بهمن 1385, 21:35 عصر
سلام
به طور عادی بازدن کلید Enter روی یکی از خانه های گرید ، خانه فعلی یک ردیف به پائین میره . در حالیکه من می خوام بره جلو تا کاربر بتونه فقط از قسمت عددی صفحه کلید و کلید Enter مقادیر رو با سرعت وارد کنه .
من سعی کردم در وقفه KeyDown با تشخیص کلید Enter این کار رو خودم انجام بدم یعنی یک خانه به جلو حرکت کنم . ولی متاسفانه وقتی DataGridView در حالت ویرایش هست ، کلید Enter نه به فرم وارد میشه و نه به گرید .

ali_kolahdoozan
پنج شنبه 05 بهمن 1385, 22:10 عصر
داری یه چیزی توی مایه های فاکتور میسازی . من ورود مقدار درون خود گرید رو پیشنهاد نمی کنم

egoldashraf
پنج شنبه 05 بهمن 1385, 23:14 عصر
CellEndEdit میتونه کارت رو راه بندازه

Happy_davood
پنج شنبه 05 بهمن 1385, 23:15 عصر
من هم دوست ندارم ولی بعضی از کاربران به این کار عادت دارند .
از طرفی در بعضی کار ها این تبدیل به یک استاندارد شده . مثلاً حسابدار ها که در زدن سند حسابداری همیشه یک دستشون درگیر نگه داشتن سند هست و تا امروز هم تمام برنامه ها مخصوصاً تحت داس این امکان رو داده بهشون .

این موضوع برام خیلی مهم و از طرفی فوریه !

Happy_davood
پنج شنبه 05 بهمن 1385, 23:18 عصر
CellEndEdit رو هم تست کردم ولی جواب نگرفتم . حتی IsInputKey رو هم Override کردم تا شاید بشه در KeyDown کلید Enter رو تشخیص داد .

اگر شما از CellEndEdit جواب گرفتید لطفاً بیشتر توضیح بدید .

ali_kolahdoozan
پنج شنبه 05 بهمن 1385, 23:19 عصر
پس لا اقل از گریدهای معمول دات نت نرو . خیلی بد قلقه . فکر کنم جانوس بهتر باشه

Happy_davood
پنج شنبه 05 بهمن 1385, 23:27 عصر
خوب مقداری از کار با این گرید جلو رفته و دیگه نمیشه برگشت .
از طرفی دوست ندارم از کامپوننت های دیگه استفاده بشه . ترجیح می دم همه چیز عادی و استاندار دات نت باشه . تازه این مشکل باید بالاخره چاره ای داشته باشه دیگه !؟

ali_kolahdoozan
پنج شنبه 05 بهمن 1385, 23:36 عصر
من یک چیزی شبیه فاکتور با ایجاد شی با کد ساختم گرید حوصلم رو سر برد

Happy_davood
جمعه 06 بهمن 1385, 13:06 عصر
خوب من بهترین روش رو پیدا کردم . با کمترین هزینه .
بهترین روش این هست که گرید کلید Enter رو Tab یا کلید RightArrow و یا LeftArrow درک کنه .
برای این کار هم یه کلاس از گرید مشتق کنید و فقط دو تا از توابع اون رو Override کنید :


public class MyDataGridView : DataGridView
{
protected override bool ProcessDialogKey(Keys keyData)
{
Keys key = (keyData & Keys.KeyCode);
if (key == Keys.Enter)
{
return this.ProcessRightKey(keyData);
}
return base.ProcessDialogKey(keyData);
}
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
return this.ProcessRightKey(e.KeyData);
}
return base.ProcessDataGridViewKey(e);
}
}


حالا فقط کافیه گرید رو از نوع MyDataGridView به کار ببرید .