اخواني الكرام السلام عليكم ورحمة الله وبركاتة
عندي سوال
كيف يمكنني ان انتقل عن طريق الانتر بين اعمدة الداتا غريد فيو
اي يكون الانتقال الى الخلية التاليه على الجنب وليس الخليه السفلى
كما لو انك كبست على tab
انا جربت الكود التالي
Protected Overrides Function ProcessCmdKey _
(ByRef msg As System.Windows.Forms.Message, _
ByVal keyData As System.Windows.Forms.Keys) As Boolean
Try
If msg.WParam.ToInt32() = CInt(Keys.Enter) Then
SendKeys.Send("{Tab}")
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Functionكما هو منتشر في اغلب المنتديات
ولكن للاسف فان الكود لا يعمل بالشكل المطلوب
والسبب ان هذا الكود يقوم بعمل tab ليس فقط لخلايا الداتاغريد فيو كما هو مطلوب
لا بل الى جميع الادوات الموجوده في الـ form ككل
كمثال بسيط افترض انو لدينا صفحه فيها الادوات التالية
textbox
datagrid
button
ولنفترض ان الموشر في الـtextbos
فباستخدام ها الكود
كلما ضغط المستخدم على enter راح ينتقل الى الداتا غريد فيو وبعد ذلك الى الخلايا في الداتا غريد فيو الى ان ينتهي من الخلايا ثم ينتقل الى الاداء التاليه والتى هي البوتم واذا ضغط المستخدم على البوتم عن طريق enter فانه ينتقل الى الاداء التى تليه وهكذا
(حتى لو كان بوتم ضغط على enter فانه لن ينفذ حدث البوتم بل سينتقل الى الاداه التى تليه)
كما قلت لكم من وجهه نظري فان هذا الكود عقيم بالعكس يضر بالمستخدم اكثر من نفعه
الكود التالي ينفذ المطلوب
Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
SendKeys.Send("{TAB}")
End Ifولكن للاسف عندما اضيف شرط اخر لعبارة if فانة لا يعمل كما اريد
كمثال على الشرط المطلوب
If e.KeyCode = Keys.Enter And Not DataGridView1.CurrentCell.Value Is Nothing Then
يعني المطلوب
ادا كانت فارغة وكبس enter فانه لا ينتقل
وبعد ما يدخل القيمة وكبس enter فانه ينتقل
هل من مساعد لحل هذا الكود
