PDA

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



seven7777777
پنج شنبه 19 فروردین 1389, 21:31 عصر
دوستان عزیز سلام

حتما همه شما از رویداد KeyPress دیتاگرید استفاده کردید و حتما دیدید که بسیاری از موارد رو Handle نمی کنه یا با مشکل اینکارو می کنه .
مثلا اگه شما بخواید با کلید Enter فرمی برای نمایش اطلاعات ردیفی خاص باز بشه و یا به جای اینکه پایین بره به چپ یا راست حرکت کنه یعنی در ستون ها حرکت کنه ، زده شدن این کلید باعث میشه که یک ردیف به سمت پایین بره که هزار تا مشکل بعدش پیش میاد . یعنی حتی با کد نویسی تو اون رویداد هم نمیشه به نتیجه مطلوب رسید .
اما بالاخره راه حل این مشکلو پیدا کردم . تو برنامه خودم تست کردم جواب داد . کافیه کد زیر رو توی کدهای فرم مربوطه کپی کنید ، همین .


protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg,
System.Windows.Forms.Keys keyData)
{
if(msg.WParam.ToInt32() == (int) Keys.Enter)
{
SendKeys.Send("{Tab}");
return true;
}
return base.ProcessCmdKey(ref msg, keyData)
}


کافیه به جای SendKeys هر کاری که می خواین بکنین رو کدش رو بزارین . رویداد بالا الان به جای کلید Enter کلید Tab رو می فرسته و به همین خاطر به جای حرکت به سمت پایین در گرید در طول سلولها حرکت می کند .

فقط اساتید گرامی اگه این کد مشکلی داره یا موارد خاصی ممکنه برای برنامه پیش بیاره ، لطفا بگین تا همه استفاده کنن .

seven7777777
شنبه 21 فروردین 1389, 10:53 صبح
فقط یه سوال داشتم . این خط آخر کد برا چی نوشته شده ؟ چکار می کنه ؟

return base.ProcessCmdKey(ref msg, keyData)

zmmehrdad
شنبه 21 فروردین 1389, 20:34 عصر
اگر return base.ProcessCmdKey رو ننویسه تمام کلید ها توسط این تابع Handle میشه یعنی اینکه دیگه حتی تایپ هم نمی تونه بکنه

seven7777777
یک شنبه 22 فروردین 1389, 13:20 عصر
خوب مگه در این حالت حلقه بی نهایت پیش نمیاد ؟
نکنه اون base یه کاری می کنه ؟