السلام عليكم ورحمة الله وبركاته
عرضت محتويات جدول في dgv مفتاح tab ينتقل من خلية لأخرى
مفتاح Enter يأخذ خلية لأسفل أو يأخذ سجل جديد
وللتسهيل على المستخدم في تعديل بيانات الخلايا ..
فلا بد من جعل مفتاح Enter ينتقل إلى الخلية المجاورة فإن لم يجد ينزل لأول خليه في السجل التالي ... أي يعمل عمل مفتاح tab
جربت هذا الكود في حدث ال keydown للداتا جريد فيو
If e.KeyCode = Keys.Enter Then
My.Computer.Keyboard.SendKeys("{Tab}")
End If
لكنه لم يفلح وكذلك جربت الكود ده كمان
If e.KeyCode = Keys.Enter Then
SendKeys.Send("{TAB}")
e.Handled = True
End If
لكنه لم يفلح ...... شكرا لكم
توجد أداة محسنة من DataGridView
قم بإضافة كلاس عن طريق القائمة Project ثم اختيار Add Class ثم ضع هذا الكود فيه
ثم شغل البرنامج مرة وحدة وبعدها تلاقي أداة جديدة في بداية الأدوات ف الاعلى خالص اسمها exDataGridView استخدمها بدل DataGridView
طبعا هي نفسها DataGridView بس مضاف عليها خدمة الانتقال للخلية التالية ب Enter وبالنسبة للانتقال للسطر التالي حيكون Tab وهذه الطريقة الامثل.
منقول من أحد الأعضاء
كود :
Public Class exDataGridView
Inherits DataGridView
Protected Overrides Function ProcessDataGridViewKey(ByVal e As KeyEventArgs) As Boolean
If e.KeyCode = Keys.Enter Then
Return Me.ProcessRightKey(e.KeyData)
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
End Class
واذا كنت تبيها زي ما قلت بالضبط "
فلا بد من جعل مفتاح Enter ينتقل إلى الخلية المجاورة فإن لم يجد ينزل لأول خليه في السجل التالي" فضع هذا الكود بدل السابق
الحمد لله وجدته وهو أيضا منقول
كود :
Public Class exDataGridView
Inherits DataGridView
Protected Overrides Function ProcessDataGridViewKey(ByVal e As KeyEventArgs) As Boolean
If e.KeyCode = Keys.Enter Then
If Me.CurrentCell.ColumnIndex = Me.Columns.Count - 1 Then
Me.CurrentCell = Me.Item(0, Me.CurrentRow.Index)
Return Me.ProcessEnterKey(e.KeyData)
Else
Return Me.ProcessRightKey(e.KeyData)
End If
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
End Class
طلع فيه تعديل أخير وهو الأفضل (المعذرة)
كود :
Public Class exDataGridView
Inherits DataGridView
Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
Dim key As Keys = (keyData And Keys.KeyCode)
If key = Keys.Enter Then
If Me.CurrentCell.ColumnIndex = Me.Columns.Count - 1 Then
Me.CurrentCell = Me.Item(0, Me.CurrentRow.Index)
Return Me.ProcessDownKey(keyData)
Else
Return Me.ProcessRightKey(keyData)
End If
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
Protected Overrides Function ProcessDataGridViewKey(ByVal e As KeyEventArgs) As Boolean
If e.KeyCode = Keys.Enter Then
If Me.CurrentCell.ColumnIndex = Me.Columns.Count - 1 Then
Me.CurrentCell = Me.Item(0, Me.CurrentRow.Index)
Return Me.ProcessDownKey(e.KeyData)
Else
Return Me.ProcessRightKey(e.KeyData)
End If
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
End Class
السادة الكرام
الكود ممتاز فيما لوكان اتجاه الداتا فيو من اليسار لليمن
أما اذا كان اتجاهها من اليمين لليسار فلا يصلح الكود لهذه المهمة
هل يمكن تعديل الكود
جزاكم الله كل خير
أخوي... إبحث في الكلمة سوف تجد كلمة Right غيرها إلى Left.....
أخوي... إبحث في الكود سوف تجد كلمة Right غيرها إلى Left.....
اخي الكريم السرور
جزاك الله كل خير
نجح الامر