PDA

View Full Version : آموزش: کنترل کردن کلیدهای زده شده روی گرید در حالت edit



mahdi87_gh
چهارشنبه 12 آبان 1389, 13:28 عصر
سلام به همه دوستان
چون دیدم دوستان زیادی در این زمینه به مشکل برمیخورن، این تاپیک رو ایجاد کردم.
در نظر بگیرید که وقتی یک کلیدی روی کیبورد فشار داده میشه , چه رویدادهایی اتفاق می افتند( برای آبجکت گریدویو رو عرض میکنما و البته اونهایی که برای ما مهم هستند رو فقط ذکر کردم)

ابتدا رویداد ProcessDialogKey
دوم رویداد ProcessDataGridViewKey
سوم رویداد dataGridView1_KeyDown
لطفا توضیحات زیر رو با دقت مطالعه بفرمایین:
دو رویداد اولی، رویدادهایی هستند که در خود کنترل گریدویو کنترل میشوند و برای اونها رویدادی در نظر گرفته نشده تا برنامه نویس (معمولی) اونها رو کنترل کنه. بنابراین اگه میخواین به این رویدادها دسترسی داشته باشین، باید یک یوزرکنترل بسازین و از گریدویو مشتق کنیدش. سپس رویدادهای ذکر شده رو override کنید.

همانطور که خودتون میدونین، بعضی از کلیدها در گریدویو معنی خاصی میدن، مثلا با زدن تب به سلول بعدی میرین یا اینتر شما رو به سطر پایینی میبره (وقتی که در حال ادیت هستید). رویدادهای اولی و دومی مقداری از نوع bool بازمیگردونن. فرض میکنیم که شما در حال ادیت یک سلول هستید و دکمه اینتر رو میزنید، رویداد ProcessDialogKey در حالت پیشفرض برای این کلیدها مقدار true و سایر کلیدهای معمولی مقدار false برمی گردونن.
اگه مقدار بازگشتی از این تابع true باشه، اصلا تابع دوم اجرا نخواهد شد!! (البته تابع دوم فقط برای کلیدهایی مثل enter و tab اجرا خواهد شد، و برای کلیدهای دیگه خروجی این تابع هیچ تاثیری در اجرای تابع دوم ندارد)

ما در مرحله اول مقدار بازگشتی اینها رو به false تغییر میدیم؛ تا رویداد دوم اجرا بشه!!! حالا چرا داریم زور میزنیم که رویداد دومی اجرا بشه؟؟!!! چون این رویداد تعیین میکنه که آیا گرید باید واسه کلید زده شده کار خاصی انجام بده؟؟؟؟
ما در اینجا هم باید مقدار بازگشتی رو به false تغییر میدیم و خودمون تابع سوم رو صدا میزنیم.
حالا توی تابع سوم که همون dataGridView1_KeyDown هستش، هر کاری دوست دارید انجام بدید:تشویق:
زیاد حرف زدم و خیلی هم کامل درست نگفتم، ببخشید دیگه. نمونه مثالی براتون میزارم تا این مزخرفاتی که بالا گفتم رو بهتر متوجه بشین.
اگه این مطلب بدردتون خورد، تشکر فراموش نشه:لبخند:

mahdi87_gh
پنج شنبه 13 آبان 1389, 10:11 صبح
دوستان سوالی داشتن همینجا مطرح کنند:چشمک:

mojtaheri
پنج شنبه 13 آبان 1389, 10:59 صبح
سلام این گرید ویو حال منو گرفته.از این که این مثال و گذاشتی ازت ممنونم.ولی این برنامه که گذاشتی گه فکر میکنم مقدار سلول اولو بر میگردونه درست کار نمی کنه لطفا راهنمایی بیشتری بکنید.

mahdi87_gh
پنج شنبه 13 آبان 1389, 11:19 صبح
سلام این گرید ویو حال منو گرفته.از این که این مثال و گذاشتی ازت ممنونم.ولی این برنامه که گذاشتی گه فکر میکنم مقدار سلول اولو بر میگردونه درست کار نمی کنه لطفا راهنمایی بیشتری بکنید.
بله دوست عزیز. این صرفا یک مقال بود که چطوری میتونیم بفهمیم که دکمه اینتر زده شد!
چون سلول در حالت ادیت قرار داره، value آن خلی است . برای خواندن اطلاعات نوشته شده در این سلول از خاصیت EditedFormattedValue استفاده کنید
موفق باشید

mojtaheri
پنج شنبه 13 آبان 1389, 11:43 صبح
یعنی اگر ابتدا رویداد ProcessDialogKey و
دوم رویداد ProcessDataGridViewKey از کار بندازیم keydown گرید ویو می تونه enter رو تشخیص بده؟

mahdi87_gh
پنج شنبه 13 آبان 1389, 11:48 صبح
ایول گرفتی لب مطلبو:لبخند:

mojtaheri
پنج شنبه 13 آبان 1389, 11:55 صبح
خوب چطوری این کار رو بکنیم؟:متفکر:

mahdi87_gh
پنج شنبه 13 آبان 1389, 12:01 عصر
دوست عزیز من نمونه برنامه گذاشتما:متعجب: