ENTER COMO TAB NO DATAGRIDVIEW
Ola pessoal , olha eu aqui de novo querendo a ajuda de vcs...
O problema é o seguinte, quando estou navegando no dgv quero
que quando apertar enter ele trocar de coluna, já procurei na net mas
os exemplos que eu encontrei não funcionaram, se vcs poderem me ajudar
desde já agradeço.
O problema é o seguinte, quando estou navegando no dgv quero
que quando apertar enter ele trocar de coluna, já procurei na net mas
os exemplos que eu encontrei não funcionaram, se vcs poderem me ajudar
desde já agradeço.
Public Class frmPrincipal
Dim contador As Integer = -1
Private Sub grid1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles grid1.KeyDown
If e.KeyCode = Keys.Enter Then
passarCelula(contador, grid1)
contador = contador + 1
If contador >= grid1.Columns.Count - 1 Then contador = -1
e.Handled = True
End If
End Sub
Private Sub passarCelula(indiceAtual As Integer, grid As DataGridView)
If indiceAtual = -1 Then
grid1.Rows(grid.CurrentRow.Index).Cells(0).Selected = True
grid1.Rows(grid.CurrentRow.Index).Cells(grid1.Columns.Count - 1).Selected = False
ElseIf indiceAtual < grid.Columns.Count - 1 Then
grid1.Rows(grid.CurrentRow.Index).Cells(indiceAtual).Selected = False
grid1.Rows(grid.CurrentRow.Index).Cells(indiceAtual + 1).Selected = True
Else
grid1.Rows(grid.CurrentRow.Index).Cells(0).Selected = True
grid1.Rows(grid.CurrentRow.Index).Cells(grid.Columns.Count - 1).Selected = False
End If
End Sub
End Class
hey JABA, então cara estou querendo algo mais simples, fiz deste jeito
Private Sub dgv1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv1.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send([Ô]{TAB}[Ô])
End If
End Sub
mas quando eu aperto enter ele passa para linha de baixo e não para coluna ao lado.
Cara se vc poder explicar seu código eu agradeço muito, ele funciono mas não do jeito que estou tentando...
Private Sub dgv1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv1.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send([Ô]{TAB}[Ô])
End If
End Sub
mas quando eu aperto enter ele passa para linha de baixo e não para coluna ao lado.
Cara se vc poder explicar seu código eu agradeço muito, ele funciono mas não do jeito que estou tentando...
Felipe, seu código está certinho, igual ao meu que postei há alguns dias aqui no forum mesmo mas um exemplo com [Ô]textbox[Ô], acho que você não deve ter habilitado o keyPreview. Clique no seu form, e na janela [Ô]properties[Ô], procure o KeyPreview (e.Handled ) e altere para True e teste novamente.
Att,
Lucas
Att,
Lucas
Faça assim:
Private Sub grid1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles grid1.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send([Ô]{TAB}[Ô])
e.Handled = True
End If
End Sub
me pontue se te ajudei.
vlw
Private Sub grid1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles grid1.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send([Ô]{TAB}[Ô])
e.Handled = True
End If
End Sub
me pontue se te ajudei.
vlw
Então galera ele Continua passando para a linha de baixo, eu quero que ele passe para coluna do lado...
Poste, se possivel, seu código como anexo para analisarmos por favor.
Att,
lucas
Att,
lucas
Form1, contem um datagridview, um botão e um textbox
Imports System.Data.SqlClient
Imports System.Windows.Forms.DataGridView
Public Class Form1
Dim contador As Integer = -1
Dim isNovo As Boolean = False
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
carrega_grid()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dgv1.Columns(0).ReadOnly = False
End Sub
Public Sub adicionar()
Try
cnn.Open()
cmd = New SqlCommand([Ô]sp_i_insert_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.Add([Ô]@codpro_grade[Ô], SqlDbType.Int).Value = Me.txt1.Text
cmd.Parameters.AddWithValue([Ô]@codigo[Ô], dgv1.CurrentRow.Cells([Ô]Código[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc1[Ô], Me.dgv1.CurrentRow.Cells([Ô]Coluna 1[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc2[Ô], Me.dgv1.CurrentRow.Cells([Ô]Coluna 2[Ô]).Value)
[ô]cmd.Parameters.AddWithValue([Ô]@qtd[Ô], dgv1.CurrentRow.Cells([Ô]Qtde[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_forn_grade[Ô], Me.dgv1.CurrentRow.Cells([Ô]Código Fornecedor[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_bar[Ô], Me.dgv1.CurrentRow.Cells([Ô]código de Barras[Ô]).Value)
If cmd.ExecuteNonQuery <> 0 Then
MsgBox([Ô]Cadastrado com sucesso![Ô], MsgBoxStyle.Information)
Else
MsgBox([Ô]O cadastro não concluido[Ô], MsgBoxStyle.Exclamation)
End If
Catch ex As Exception
MsgBox([Ô]Erro: [Ô] & Err.Description, MsgBoxStyle.Exclamation)
Finally
cnn.Close()
cmd = Nothing
End Try
End Sub
Public Sub atualiza()
Try
cnn.Open()
cmd = New SqlCommand([Ô]sp_U_altera_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
[ô]cmd.Parameters.Add([Ô]@codpro_grade[Ô], SqlDbType.Int).Value = Me.txt1.Text
cmd.Parameters.Add([Ô]@codigo[Ô], SqlDbType.Int).Value = Me.dgv1.CurrentRow.Cells([Ô]Código[Ô]).Value
cmd.Parameters.AddWithValue([Ô]@desc1[Ô], Me.dgv1.CurrentRow.Cells([Ô]Coluna 1[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc2[Ô], Me.dgv1.CurrentRow.Cells([Ô]Coluna 2[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@qtd[Ô], dgv1.CurrentRow.Cells([Ô]Qtde[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_forn_grade[Ô], Me.dgv1.CurrentRow.Cells([Ô]Código Fornecedor[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_bar[Ô], Me.dgv1.CurrentRow.Cells([Ô]código de Barras[Ô]).Value)
If cmd.ExecuteNonQuery Then
MsgBox([Ô]Alterado com sucesso![Ô], MsgBoxStyle.Information)
Else
MsgBox([Ô]A grade não foi alterada[Ô], MsgBoxStyle.Information)
End If
Catch ex As Exception
MsgBox([Ô]Erro: [Ô] & Err.Description, MsgBoxStyle.Critical)
Finally
cnn.Close()
cmd = Nothing
End Try
[ô]carrega_grid()
End Sub
Private Sub dgv1_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgv1.CellBeginEdit
If dgv1.CurrentRow.IsNewRow Then
isNovo = True
End If
End Sub
Private Sub dgv1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv1.CellEnter
If e.ColumnIndex = 1 Then
dgv1.BeginEdit(True)
End If
End Sub
Private Sub dgv1_RowValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv1.RowValidated
isNovo = False
End Sub
Private Sub dgv1_RowValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgv1.RowValidating
If dgv1.IsCurrentRowDirty Then
dgv1.CommitEdit(DataGridViewDataErrorContexts.Commit)
If isNovo = True Then
adicionar()
Else
atualiza()
End If
End If
End Sub
Private Sub dgv1_UserDeletedRow(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles dgv1.UserDeletedRow
isNovo = True
End Sub
Private Sub dgv1_UserDeletingRow(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowCancelEventArgs) Handles dgv1.UserDeletingRow
Try
cnn.Open()
cmd = New SqlCommand([Ô]sp_D_deleta_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.Add([Ô]@codgrade[Ô], SqlDbType.Int).Value = Me.dgv1.CurrentRow.Cells([Ô]Código[Ô]).Value
cmd.Parameters.Add([Ô]@codprod[Ô], SqlDbType.Int).Value = Me.txt1.Text
If cmd.ExecuteNonQuery <> 0 Then
MsgBox([Ô]Excluido com Sucesso[Ô], MsgBoxStyle.Information)
Else
MsgBox([Ô]A grade não foi excluida[Ô], MsgBoxStyle.Information)
End If
[ô]grid.Rows.Remove(dr)
Catch ex As Exception
MsgBox([Ô]Erro: [Ô] & Err.Description, MsgBoxStyle.Exclamation)
Finally
cnn.Close()
cmd = Nothing
End Try
[ô]carrega_grid()
End Sub
Private Sub dgv1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv1.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send([Ô]{TAB}[Ô])
e.Handled = True
End If
End Sub
End Class
Imports System.Data.SqlClient
Imports System.Windows.Forms.DataGridView
Public Class Form1
Dim contador As Integer = -1
Dim isNovo As Boolean = False
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
carrega_grid()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dgv1.Columns(0).ReadOnly = False
End Sub
Public Sub adicionar()
Try
cnn.Open()
cmd = New SqlCommand([Ô]sp_i_insert_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.Add([Ô]@codpro_grade[Ô], SqlDbType.Int).Value = Me.txt1.Text
cmd.Parameters.AddWithValue([Ô]@codigo[Ô], dgv1.CurrentRow.Cells([Ô]Código[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc1[Ô], Me.dgv1.CurrentRow.Cells([Ô]Coluna 1[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc2[Ô], Me.dgv1.CurrentRow.Cells([Ô]Coluna 2[Ô]).Value)
[ô]cmd.Parameters.AddWithValue([Ô]@qtd[Ô], dgv1.CurrentRow.Cells([Ô]Qtde[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_forn_grade[Ô], Me.dgv1.CurrentRow.Cells([Ô]Código Fornecedor[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_bar[Ô], Me.dgv1.CurrentRow.Cells([Ô]código de Barras[Ô]).Value)
If cmd.ExecuteNonQuery <> 0 Then
MsgBox([Ô]Cadastrado com sucesso![Ô], MsgBoxStyle.Information)
Else
MsgBox([Ô]O cadastro não concluido[Ô], MsgBoxStyle.Exclamation)
End If
Catch ex As Exception
MsgBox([Ô]Erro: [Ô] & Err.Description, MsgBoxStyle.Exclamation)
Finally
cnn.Close()
cmd = Nothing
End Try
End Sub
Public Sub atualiza()
Try
cnn.Open()
cmd = New SqlCommand([Ô]sp_U_altera_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
[ô]cmd.Parameters.Add([Ô]@codpro_grade[Ô], SqlDbType.Int).Value = Me.txt1.Text
cmd.Parameters.Add([Ô]@codigo[Ô], SqlDbType.Int).Value = Me.dgv1.CurrentRow.Cells([Ô]Código[Ô]).Value
cmd.Parameters.AddWithValue([Ô]@desc1[Ô], Me.dgv1.CurrentRow.Cells([Ô]Coluna 1[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc2[Ô], Me.dgv1.CurrentRow.Cells([Ô]Coluna 2[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@qtd[Ô], dgv1.CurrentRow.Cells([Ô]Qtde[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_forn_grade[Ô], Me.dgv1.CurrentRow.Cells([Ô]Código Fornecedor[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_bar[Ô], Me.dgv1.CurrentRow.Cells([Ô]código de Barras[Ô]).Value)
If cmd.ExecuteNonQuery Then
MsgBox([Ô]Alterado com sucesso![Ô], MsgBoxStyle.Information)
Else
MsgBox([Ô]A grade não foi alterada[Ô], MsgBoxStyle.Information)
End If
Catch ex As Exception
MsgBox([Ô]Erro: [Ô] & Err.Description, MsgBoxStyle.Critical)
Finally
cnn.Close()
cmd = Nothing
End Try
[ô]carrega_grid()
End Sub
Private Sub dgv1_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgv1.CellBeginEdit
If dgv1.CurrentRow.IsNewRow Then
isNovo = True
End If
End Sub
Private Sub dgv1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv1.CellEnter
If e.ColumnIndex = 1 Then
dgv1.BeginEdit(True)
End If
End Sub
Private Sub dgv1_RowValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv1.RowValidated
isNovo = False
End Sub
Private Sub dgv1_RowValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgv1.RowValidating
If dgv1.IsCurrentRowDirty Then
dgv1.CommitEdit(DataGridViewDataErrorContexts.Commit)
If isNovo = True Then
adicionar()
Else
atualiza()
End If
End If
End Sub
Private Sub dgv1_UserDeletedRow(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles dgv1.UserDeletedRow
isNovo = True
End Sub
Private Sub dgv1_UserDeletingRow(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowCancelEventArgs) Handles dgv1.UserDeletingRow
Try
cnn.Open()
cmd = New SqlCommand([Ô]sp_D_deleta_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.Add([Ô]@codgrade[Ô], SqlDbType.Int).Value = Me.dgv1.CurrentRow.Cells([Ô]Código[Ô]).Value
cmd.Parameters.Add([Ô]@codprod[Ô], SqlDbType.Int).Value = Me.txt1.Text
If cmd.ExecuteNonQuery <> 0 Then
MsgBox([Ô]Excluido com Sucesso[Ô], MsgBoxStyle.Information)
Else
MsgBox([Ô]A grade não foi excluida[Ô], MsgBoxStyle.Information)
End If
[ô]grid.Rows.Remove(dr)
Catch ex As Exception
MsgBox([Ô]Erro: [Ô] & Err.Description, MsgBoxStyle.Exclamation)
Finally
cnn.Close()
cmd = Nothing
End Try
[ô]carrega_grid()
End Sub
Private Sub dgv1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv1.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send([Ô]{TAB}[Ô])
e.Handled = True
End If
End Sub
End Class
eu coloquei esse codigo abaixo para rodar e funcionou perfeitamente.
Private Sub dgv1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles dgv1.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send([Ô]{TAB}[Ô])
e.Handled = True
End If
End Sub
Private Sub dgv1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles dgv1.KeyDown
If e.KeyCode = Keys.Enter Then
SendKeys.Send([Ô]{TAB}[Ô])
e.Handled = True
End If
End Sub
Tente o seguinte:
01. Selecione False para a propriedade MultiSelect.
02. Escreva as linhas no evento KeyPress
if e.keychar = chrw(keys.enter) then
dim r as integer = grid.currentrow.index - 1
dim c as integer = grid.currentcell.columnindex
grid.rows(r).cells(c).selected = true
sendkeys.send([Ô]{tab}[Ô])
end if
Veja se tem algum erro de sintaxe pois digitei direto no cel.
01. Selecione False para a propriedade MultiSelect.
02. Escreva as linhas no evento KeyPress
if e.keychar = chrw(keys.enter) then
dim r as integer = grid.currentrow.index - 1
dim c as integer = grid.currentcell.columnindex
grid.rows(r).cells(c).selected = true
sendkeys.send([Ô]{tab}[Ô])
end if
Veja se tem algum erro de sintaxe pois digitei direto no cel.
Acho que o erro do amigo Felipe, ocorre logo após ser digitado algo no datagrid, ai o código que eu e o Jaba postamos realmente não funcionaria...
Tópico encerrado , respostas não são mais permitidas