PDA

View Full Version : اینتر در گراید



اسماعیل(واز)
چهارشنبه 22 خرداد 1387, 22:38 عصر
می خواستم بونم چگونه میشه با زدن enter در datagrid فاکوس یه جای انکه به سمت پایین منتقل شود به سمت چپ منتقل شود .

hooooman
پنج شنبه 23 خرداد 1387, 01: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, 12:39 عصر
میشه بیشتر توضیح بدین که چطور از این کد استفاده کنم.

parsavb
پنج شنبه 23 خرداد 1387, 12:42 عصر
با اجازه این کد رو می تونی تورویداد keypress سلولهای grid خودتون بذارین و حتی تغییراتی برای سلولهای خاص مثلاً آخر هرسطر و ...... رو بدین و از اون استفاده کنین

hooooman
پنج شنبه 23 خرداد 1387, 22:37 عصر
با اجازه این کد رو می تونی تورویداد keypress سلولهای grid خودتون بذارین و حتی تغییراتی برای سلولهای خاص مثلاً آخر هرسطر و ...... رو بدین و از اون استفاده کنین


استاد نه نه !!!
این کد رو توی 1 کلاس در پروژتون قرار بدین ، پروژه رو Build کنین و بعد از ToolBox بجای DataGridView از CustomDataGridView استفاده کنین
عزت زیاد

ali_md110
جمعه 24 خرداد 1387, 00: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, 08: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