Hallo Dieter,
ich verwende das sevDataGrid3 im ListModus und verwende
die Ereignisse "_CellDblClick" und "_CellClick" um die Zeilen
im Grid auszuwerten und ggf. einzufärben.
Dazu habe ich für die Form ein ListItem-Object erstellt,
welches ich für beide Ereignisse verwende.
Prizipiell funktioniert alles ganz gut, bis auf den Fall, dass
intensieves "Klicken" dazu führt, dass die Wertübernahme aus den
ListItems irgendwann (undefiniert) nicht mehr klappt.
In der IDE führt dies dazu, dass fehlerhafte Werte übernommen werden, obwohl
die Indezierung über "nRow" und "nCol" stimmt. Als EXE resultiert irgendwann ein
"Speicherzugriffs-Fehler".
Ich ging davon aus, dass die Events "Click/DblClick" nacheinander abgearbeitet werden und
somit das gleiche ListItem-Object genutzt werden kann.
=> geht aber nicht
=> es geht erst, wenn ich zwei separate ListItem-Objeckte für "Click" eines
und für "DblClick" eines verwende.
Habe ich etwas verkehrt gedacht, oder liegt dies am sevDataGrid3?
Hier ein Auszug meines Programmes mit einem gemeinsamen ListItem-Object:
Deklarationsteil der Form:
Private sevEditItem As sevDataGrid3.ListItem Jetzt gehe ich wie folgt vor:
=> RechtsKlick der Maus bewirkt die Zeilenprüfung mit ggf. resultierender Einfärbung
=> LinksKlick der Maus Einfärbung aufheben
Private Sub grdStations_CellClick(ByVal nRow As Long, ByVal nCOL As Long, ByVal _
Button As Integer, ByVal Shift As Integer)
Set sevEditItem = grdStations.ListItems(nRow)
If Button = 2 Then
'RechtsKlick => Diff-Chk in Zeile ggf. Einfärben
'Bei gefundenen Diffs Zeilenauswahl aufheben
If f_bCheckForDiffGrdValues(grdStations, sevClearItem) Then
grdStations.SelectionHide
End If
Else
'LinksKlick => Reset Einfärbung + Zeilenauswahl aktivieren
subResetRowCellColors grdStations, sevEditItem
grdStations.SelectionShow
End If
End Sub =>Doppelklick aktiviert das Editieren der gewählten Zelle
=>Meine Spalten beinhalten BOOL oder NumWerte
=>Daher platziere ich ein "sevEin2" über der Zelle
=>Je nach Typ wird der Eingabemoddus des "sevEin2" eingestellt "Text" oder "CboLst"
=>Nach Eingabe wird der TxTWert in DataGrid Zelle übernommen
Erfolgt über "LostFocus" Event der TextBox
Private Sub grdStations_CellDblClick(ByVal nRow As Long, ByVal nCOL As Long)
Set sevEditItem = grdStations.ListItems(nRow)
If f_nGetParTyp = TYP_BOOL Then
sevEditTxt.Style = rsDropDownList
Else
sevEditTxt.Style = rsTextBox
End If
'..
sub_MoveSevTBoxInSevGrid3 grdStations, sevEditTxt, sevEditItem, nRow, nCOL, _
2020, 126
sub_TakeGridValue grdStations, sevEditTxt, sevEditItem, nRow, nCOL
'..
End Sub Meine Frage ist also kurz gesagt:
Darf ich ein und das selbe "ListItem" Object für beide Ereignisse nutzen?
Ist es "normal" wenn in diesem Fall eine Ausnahme resultiert?
=>Ausnahme erfolgt sporadisch, es gibt keine eindeutige Klickfolge
=> verwende ich separate ListItem-Objecte geht alles prima.
Danke schon jetzt
Tschaui
Woellmi |