Hallo Robert,
Dieter hat natürlich vollkommen Recht, es gibt kein Event wie "OnCalendarClick" - was aber cool wäre
Du könntest als WorkAround aber bspw. im OnButtonClick-Event des Grids einen Timer starten und dort prüfen, ob sich das Grid im Editiermodus befindet und der aktuelle/gespeicherte Wert vom Editierwert unterscheidet, siehe Dokumentation des Grids:
IsEditMode: Gibt einen Wert zurück, der festlegt, ob gerade eine Zelle editiert oder eine neue Datenzeile hinzugefügt wird.
EditText: Gibt den aktuellen Eingabetext im Editier-Modus zurück oder legt diesen fest.
Wenn dem so ist (gespeicherter Wert ungleich Editierwert), hat der Benutzer ein (anderes) Datum im Kalender angeklickt und du sendest in diesem Fall ein Return an das Grid.
Hier mal ein vollständiges Beispielprojekt, das funktioniert bei mir prima:
Private Sub btnFillGrid_Click()
On Error GoTo ErrorHandler
'Grid im ListMode füllen, eine (Datums-)Spalte, ein Item:
With Me.sevGrid1
.Clear
If .Cols = 0 Then
.DataMode = Mode_List
.AllowEdit = True
'Spalte X mit Kalenderfunktion
With .ColumnAdd("Datum", "X", 1500)
.InputType = INPUT_DATE
.SortType = SORT_DATE
.Button = True
End With
End If
.LockUpdate True
.AddItem "01.01.2018"
.LockUpdate False
.Refresh
End With
Exit Sub
ErrorHandler:
MsgBox Err.Number & ": " & Err.Description
End Sub Private Sub sevGrid1_OnButtonClick(ByVal nRow As Long, ByVal nCol As Long, _
sText As String, bCancel As Boolean)
On Error GoTo ErrorHandler
If nCol = Me.sevGrid1.GetCol("Datum") Then
'Timer starten. Dort wird geprüft, ob sich das Datum geändert hat:
Me.tmrCloseEditMode.Enabled = True
End If
Exit Sub
ErrorHandler:
MsgBox Err.Number & ": " & Err.Description
End Sub Private Sub tmrCloseEditMode_Timer()
On Error GoTo ErrorHandler
With Me.sevGrid1
'Prüfen, ob sich das Grid im Editiermodus befindet:
If .IsEditMode = MODE_EDIT Then
'Editiermodus aktiv:
'--> Prüfen, ob sich das Datum geändert hat
If .EditText <> .SelectedItem.CellText("Datum") Then
'Datum hat sich geändert:
'--> Timer stoppen und Return senden
Me.tmrCloseEditMode.Enabled = False
.SendKeys vbKeyReturn, 0
End If
Else
' Editiermodus nicht aktiv
'(je nach Intervall des Timers hat der Benutzer bereits den
' Editiermodus verlassen):
'--> Timer stoppen
Me.tmrCloseEditMode.Enabled = False
End If
End With
Exit Sub
ErrorHandler:
MsgBox Err.Number & ": " & Err.Description
Me.tmrCloseEditMode.Enabled = False
End Sub Liebe Grüße
Mark
Beitrag wurde zuletzt am 19.12.17 um 23:24:09 editiert. |