Jag har en fråga angående datagridview där jag har följande kod: Kan du inte bara flytta på vald cell till där den skall vara? Gör det i slutet av funktionen? Det är väldigt enkelt: Lysande!! Detta löser mitt problem och dessutom lite extra tips!! Man tackar!DataGridView
Private Sub dgvSAM_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgvSAM.KeyDown
MDIParent1.Cursor = System.Windows.Forms.Cursors.WaitCursor
If e.KeyCode = Keys.Enter Then
ExpTFA = Me.dgvSAM.Item(0, Me.dgvSAM.CurrentRow.Index).Value
ExpLVV = Me.dgvSAM.Item(9, Me.dgvSAM.CurrentRow.Index).Value
frmUppdrag.MdiParent = MDIParent1
frmUppdrag.Show()
End If
MDIParent1.Cursor = System.Windows.Forms.Cursors.Default
End Sub
Denna kod fungerar utmärkt men det är en "kosmetisk" egenhet som jag inte gillar nämligen att när jag trycker enter så hoppar fokus ner en rad, jag vill att fokus ska vara kvar på samma rad som jag tryckte enter. Går detta att ställa in med en egenskap? Jag är tacksam för lite tips!
Sv: DataGridView
Eller kanske cellen flyttar sig ner efter funktionen, kan du då inte flytta cellen ett snäpp över där den skall hamna till slut?Sv: DataGridView
Private Sub dgvSAM_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgvSAM.KeyDown
MDIParent1.Cursor = System.Windows.Forms.Cursors.WaitCursor
If e.KeyCode = Keys.Enter Then
ExpTFA = Me.dgvSAM.Item(0, Me.dgvSAM.CurrentRow.Index).Value
ExpLVV = Me.dgvSAM.Item(9, Me.dgvSAM.CurrentRow.Index).Value
frmUppdrag.MdiParent = MDIParent1
frmUppdrag.Show()
e.SuppressKeyPress = True
End If
MDIParent1.Cursor = System.Windows.Forms.Cursors.Default
End Sub
Om du vill kunna öppna flera rader samtidigt så skulle jag rekommendera att du i frmUppdrag överlagrade Show metoden med en egen:
Private ExpTFA As Object
Private ExpLVV As Object
Public Overloads Sub Show(ByVal MdiParent As System.Windows.Forms.Form, ByVal ExpTFA As Object, ByVal ExpLVV As Object)
MDIParent1.Cursor = System.Windows.Forms.Cursors.WaitCursor
Me.ExpTFA = ExpTFA
Me.ExpLVV = ExpLVV
Me.MdiParent = MDIParent1
Me.Show()
MDIParent1.Cursor = System.Windows.Forms.Cursors.Default
End Sub
För att öppna en ny instans skriver du istället:
Private Sub dgvSAM_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgvSAM.KeyDown
If e.KeyCode = Keys.Enter Then
Dim f As New frmUppdrag
f.Show(Me.MdiParent, dgvSAM.CurrentRow.Cells(0).Value, dgvSAM.CurrentRow.Cells(9).Value)
e.SuppressKeyPress = True
End If
End Sub
Nackdelen är nu att du kan öppna ett uppdrag flera gånger.
För att lösa det måste du hålla reda på om det finns några fönster öppna sedan tidigare.
Ett enkelt sätt att göra det är att lägga till följande kod i frmUppdrag:
Private Shared forms As New List(Of frmUppdrag)
Private Sub frmUppdrag_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
forms.Add(Me)
End Sub
Private Sub frmUppdrag_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
forms.Remove(Me)
End Sub
Public Function GetForm(ByVal ExpTFA As Object, ByVal ExpLVV As Object) As frmUppdrag
For Each f As frmUppdrag In forms
If f.ExpTFA = ExpTFA AndAlso f.ExpLVV = ExpLVV Then
Return f
End If
Next
Return Nothing
End Function
Och ändra koden som öppnar fönstret till:
Private Sub dgvSAM_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgvSAM.KeyDown
If e.KeyCode = Keys.Enter Then
Dim ExpTFA As Object = dgvSAM.CurrentRow.Cells(0).Value
Dim ExpLVV As Object = dgvSAM.CurrentRow.Cells(9).Value
Dim f As frmUppdrag = frmUppdrag.GetForm(ExpTFA, ExpLVV)
If f Is Nothing Then
f = New frmUppdrag
f.Show(Me.MdiParent, dgvSAM.CurrentRow.Cells(0).Value, dgvSAM.CurrentRow.Cells(9).Value)
Else
f.BringToFront()
End If
e.SuppressKeyPress = True
End If
End Sub
Sv:DataGridView
Mvh Claes