View Full Version : اینتر در گراید
اسماعیل(واز)
چهارشنبه 22 خرداد 1387, 23:38 عصر
می خواستم بونم چگونه میشه با زدن enter در datagrid فاکوس یه جای انکه به سمت پایین منتقل شود به سمت چپ منتقل شود .
hooooman
پنج شنبه 23 خرداد 1387, 02:02 صبح
سلام
از این کلاس استفاده کن:
Public Class CustomDataGridView
Inherits System.Windows.Forms.DataGridView
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, _
ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Enter Then
Return Me.ProcessLeftKey(keyData)
End Function
Protected Overrides Function ProcessDataGridViewKey(ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
If isAutoCellMoved Then
isAutoCellMoved = Not isAutoCellMoved
Return True
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
End Class
rika_vazy
پنج شنبه 23 خرداد 1387, 13:39 عصر
میشه بیشتر توضیح بدین که چطور از این کد استفاده کنم.
parsavb
پنج شنبه 23 خرداد 1387, 13:42 عصر
با اجازه این کد رو می تونی تورویداد keypress سلولهای grid خودتون بذارین و حتی تغییراتی برای سلولهای خاص مثلاً آخر هرسطر و ...... رو بدین و از اون استفاده کنین
hooooman
پنج شنبه 23 خرداد 1387, 23:37 عصر
با اجازه این کد رو می تونی تورویداد keypress سلولهای grid خودتون بذارین و حتی تغییراتی برای سلولهای خاص مثلاً آخر هرسطر و ...... رو بدین و از اون استفاده کنین
استاد نه نه !!!
این کد رو توی 1 کلاس در پروژتون قرار بدین ، پروژه رو Build کنین و بعد از ToolBox بجای DataGridView از CustomDataGridView استفاده کنین
عزت زیاد
ali_md110
جمعه 24 خرداد 1387, 01:21 صبح
Private Sub TextBox_KeyPress( _
ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs)
If CType(sender, TextBox).Text = String.Empty And _
e.KeyChar = Chr(46) Then
e.Handled = True
Return
End If
If CType(sender, TextBox).Text.Contains(Chr(46)) And _
e.KeyChar = Chr(46) Then
e.Handled = True
Return
End If
If (Not (Char.IsDigit(e.KeyChar) Or _
Char.IsControl(e.KeyChar) Or _
(e.KeyChar = Chr(46)))) Then
e.Handled = True
End If
End Sub
Private Sub DG_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlSho wingEventArgs) Handles dg.EditingControlShowing
press = dg.CurrentRow.Index
If Me.dg.CurrentCell.ColumnIndex = 2 And _
Not e.Control Is Nothing Then
Dim tb As TextBox = CType(e.Control, TextBox)
AddHandler tb.KeyPress, AddressOf TextBox_KeyPress
End If
End Sub
Private Sub DG_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dg.SelectionChanged
Dim x As Integer, r As Integer
If press >= 0 Then
Dim new_row As Integer = press
r = dg.CurrentCell.ColumnIndex
x = dg.CurrentCell.ColumnIndex
If r = 0 Then
If dg.Rows(new_row).Cells(0).Value Is DBNull.Value Then
x = x + 1
End If
End If
If x > (dg.Columns.Count - 1) Then
x = 0
new_row += 1
End If
press = -1
dg.CurrentCell = dg.Rows(new_row).Cells(x)
End If
End Sub
Private Sub DG_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dg.KeyDown
On Error Resume Next
Dim x As Integer, r As Integer
If e.KeyCode = Keys.Return Then
Dim cur_cell As DataGridViewCell = dg.CurrentCell()
Dim new_row As Integer = cur_cell.RowIndex
x = cur_cell.ColumnIndex + 1
r = cur_cell.ColumnIndex
If r = 1 Then
If dg.Rows(new_row).Cells(0).Value = 0 Then
x = x + 1
End If
End If
If x > (dg.Columns.Count - 1) Then
x = 0
new_row += 1
If new_row > (dg.RowCount - 1) Then
new_row -= 1
End If
End If
dg.CurrentCell = dg.Rows(new_row).Cells(x)
e.Handled = True
End If
End Sub
من از این کد استفاده میکنم خوب جواب میده
در ضمن یک متغیر در جنرال برنامه بنویس
Dim press As Integer = -1
rika_vazy
جمعه 24 خرداد 1387, 09:35 صبح
مرسی از بابت کدی که دادین.
البته این تابع هم همین کارو میکنه.امتحان کنید بد نیست
ProtectedOverridesFunction ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) AsBoolean
'------------------------------------------------------
If keyData = 13 Then
SendKeys.Send("{left}")
ReturnTrue
Else
ReturnMyBase.ProcessKeyEventArgs(msg)
EndIf
EndFunction
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.