PDA

View Full Version : keydown در datagrid همیشه کار نمی کنه ؟



Milad
جمعه 11 آذر 1384, 23:32 عصر
سلام
من کلی مشکل داشتم که با سرچ در MSDN و همین انجمن حل شد حالا رسیدم به یک موضوع که تا آلان جوابی براش پیدا نکردم
من می خوام که وقتی کاربر داره در datagrid حرکت می کنه (با کلید ها مکان نما) اگر خواست که اون رو ایدت بکنه مثلا دکمه Enter رو بزنه و من بتونم اطلاعت اون رکوردی که در اون Enter زده شده رو بدست بیارم ! ولی نمی دونم چرا اصلا متد keydown اجرا نمی شه ولی وقتی فکوس رو می برم روی caption دیتاگیرد متد keydown اجرا می شه

در زمانی که بر روی اون کیلیک می شه روشی گفته شده(http://msdn.microsoft.com/library/en-us/vbcon/html/vbconReturningClickedCellValueFromDataGrid.asp?fra me=true)

حالا من گیر این قضیه هستم که با فشردن یک دکمه اطلاعات رو بدست بیارم

asilverisis
شنبه 12 آذر 1384, 02:16 صبح
سلام
شما می تونی از یه کدایی مثله این استفاده کنی
این کد Enter رو تشخیص می ده و به TAB تبدیل میکنه
یعنی اگر enter بزنی میره به ستون بعدی نه سطر بعدی


Public Class MyDataGrid
Inherits DataGrid

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
If msg.WParam.ToInt32() = CInt(Keys.Enter) Then
SendKeys.Send("{Tab}")
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function 'ProcessCmdKey

End Class 'MyDataGrid



البته شما با این کد در واقع یه کامپوننت می سازی و باید اونو به پروژه اضافه کنی

البته می تونی فقط این کلاس رو توی پروژه بذاری و هر جا از Datagrid استفاده کردی بری توی کد
Code Generator و نوع کلاس Datagrid رو به همین کلاس تغییر بدی

Microsoft.net
شنبه 12 آذر 1384, 23:38 عصر
سلام
شما می تونی از یه کدایی مثله این استفاده کنی
این کد Enter رو تشخیص می ده و به TAB تبدیل میکنه
یعنی اگر enter بزنی میره به ستون بعدی نه سطر بعدی


Public Class MyDataGrid
Inherits DataGrid

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
If msg.WParam.ToInt32() = CInt(Keys.Enter) Then
SendKeys.Send("{Tab}")
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function 'ProcessCmdKey

End Class 'MyDataGrid



البته شما با این کد در واقع یه کامپوننت می سازی و باید اونو به پروژه اضافه کنی

البته می تونی فقط این کلاس رو توی پروژه بذاری و هر جا از Datagrid استفاده کردی بری توی کد
Code Generator و نوع کلاس Datagrid رو به همین کلاس تغییر بدی

فقط عیب SendKeys.Send اینه که موقع trace صفحه کلید قفل می کنه

Milad
یک شنبه 13 آذر 1384, 01:35 صبح
ممنون از جوابت ولی متوجه نشدم !
مشکل من این بود که می خوام وقتی کلید enter بر روی datagrid زده شده بتونیم بفهیمم که Enetr زده شده و اطلاعات رو از رکوردمورد نظر برداشت کنیم

asilverisis
یک شنبه 13 آذر 1384, 02:43 صبح
سلام
خوب این کد هم تشخیص می ده که Enter زده شده حالا به جای SendKeys.Send("{Tab}")

یه کدی بنویس که اطلاعات رکورد فعال رو بخونه
با استفاده از یه خواصی مثل CurrentRecord یا SelectedIndex و مثل اینا
حالا چون .net رو دستگام نصب نیست نمی تونم دقیقش رو بهت بگم
یه کم هم خودت بگرد دیگه

اگر به جواب نرسیدی سعی میکنم در اسرع وقت جواب بدم

موفق باشید
موفق

asilverisis
یک شنبه 13 آذر 1384, 02:48 صبح
فقط عیب SendKeys.Send اینه که موقع trace صفحه کلید قفل می کنه

اگر کامپوننتش کنیم دیگه خبری از این حرفا نیست
چون Trace که دیگه تو DLL نمیره

Microsoft.net
سه شنبه 15 آذر 1384, 22:38 عصر
به طور کلی Sendkeys برای Backward Compatibility در دات نت گذاشته شده و مخصوص نسخه 6 وی بی هست و استفاده اون در دات نت بخاطر بهم زدن بالانس Stack در هنگام اجرا توصیه نمی شه و بعضی مواقع هم باعث قفل شدن صفحه کلید میشه

habedijoo
چهارشنبه 16 آذر 1384, 13:47 عصر
سلام

دیتا گرید VS2005 تمامی این امکانات رو دارد . بهتره هر چه سریعتر خودتو به این ورژن آپدیت کنی .