Hallo Dieter
Danke für deine Antwort. Hab dies zwischenzeitlich auch getan. Falls jemand das gleiche Problem hat hier der Code zum verschieben einer Datenzeile in einem sevDataGrid im ListMode über Button nach OBEN bzw. nach UNTEN :
Private Sub btnUp_Click()
' nach oben verschieben
With lstTarget
' Neue Datenzeile einfügen und mit den Daten (Spalten) der zuvor ausgewählten
' Zeile füllen ..., "vRow - 1" ist dabei die Position an der die neue
' Datenzeile eingefügt werden soll, nähmlich eine Zeile über der ausgewählten
' Datenzeile
.AddItem lstTarget.Text(vRow, 1) & vbTab & lstTarget.Text(vRow, 2) & vbTab & _
lstTarget.Text(vRow, 3) & vbTab & lstTarget.Text(vRow, 4) & vbTab & _
lstTarget.Text(vRow, 5) & vbTab &
lstTarget.Text(vRow, 6), vRow - 1
' in die neue Zeile wechseln
.Row = vRow - 1
' alte Zeile löschen
.DeleteRow vRow + 2
End With
End Sub Private Sub btnDown_Click()
' nach unten verschieben
With lstTarget
.AddItem lstTarget.Text(vRow, 1) & vbTab & lstTarget.Text(vRow, 2) & vbTab _
& lstTarget.Text(vRow, 3) & vbTab & lstTarget.Text(vRow, 4) & vbTab & _
lstTarget.Text(vRow, 5) & vbTab & lstTarget.Text(vRow, 6), vRow + 2
.DeleteRow vRow
.Row = vRow + 1
End With
End Sub vRow wird dabei beim RowChange Ereignis übergeben...
Private Sub lstTarget_RowChange(ByVal nRow As Long)
vRow = nRow
' Button Ein- bzw. Ausschalten
If nRow = 1 Then btnUp.Enabled = False Else btnUp.Enabled = True
If nRow = lstTarget.Rows Then btnDown.Enabled = False Else btnDown.Enabled = _
True
End Sub Damit das ganze beim verschieben nicht "flackert", kann man mit dem nachfolgenden Code jedes Control einer Form - oder die Form selbst - "einfrieren", dann den Code ausführen und anschliessend das Control wieder freigeben.
Private Sub btnDown_Click()
LockControl lstTarget, True
...
LockControl lstTarget, False
End Sub Dafür benötigt man diesen Funktion in einem Modul:
' Modulname modLockControl
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_SETREDRAW = &HB
Public Function LockControl(objX As Object, bLock As Boolean)
If bLock Then
' Disable the Redraw flag for the specified window
Call SendMessage(objX.hwnd, WM_SETREDRAW, False, 0)
Else
' Enable the Redraw flag for the specified window, and repaint
Call SendMessage(objX.hwnd, WM_SETREDRAW, True, 0)
objX.Refresh
End If
End Function Gruß Andreas |