vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen & Antworten rund um sev-Komponenten
sevDataGrid3 und ListItem bei CellClick und DoubleClick 
Autor: Woellmi
Datum: 11.10.16 22:17

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: sevDataGrid3 und ListItem bei CellClick und DoubleClick 
Autor: ModeratorDieter (Moderator)
Datum: 12.10.16 06:58

Also ganz ehrlich: ich würde das nicht so machen.
Auch ist mir nicht ganz klar, warum du überhaupt ein ListItem-Objekt benötigst. Wenn du es brauchst, würde ich in jedem Fall zwei Objekte verwenden.

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: sevDataGrid3 und ListItem bei CellClick und DoubleClick 
Autor: Woellmi
Datum: 12.10.16 08:52

Hi Dieter,

danke für die Info.

Zugegeben gibt es bestimmt bessere Wege das Ziel zu erreichen.
Bisher habe ich das Grid meistens für reine Anzeige und einfache
Eingabeaufgaben verwendet.(Möglichkeiten nicht voll ausgenutzt)
Aber bisher lief alles gut.

Das DataGrid bildet mehrere Parametersätze (Spalten) ab, die verglichen
und ggf. modifiziert werden sollen. In den Zeilen werden dann die Parameter aufgelistet.
Damit kann man die Parametersätze gut gegenüberstellen. (im techn. Bereich übliche Darstellung)
Der Nachteil: nicht die Spalte, sondern die Zeile repräsentiert den Eigenschaftswert.

Um Zeilenweise auf den GridInhalt (Im ListMode) zuzugreifen, scheint mir der Weg
über das ListItem nicht der verkehrteste zu sein. "Einfach" die Zeile als ListItem
selektieren und verarbeiten.
Jede Zelle steht einzeln im Zugriff und kann ausgewertet bzw. modifiziert werden.

=> Maus RechtsKlick auf eine beliebige Zelle:
* Alle Werte der gewählten Zeile, die vom Wert der ersten Zeilenspalte abweichen
sollen farblich markiert werden. z.B. grün=identisch, cyan=abweichend
* Der Referenzwert (1. Spalte) bleibt unverändert.
* Die Zeilenmarkierung verschwindet.
=> Maus LinksKlick auf eine beliebige Zelle der Zeile:
* Aufheben der Farbmarkierung (Unterschiede)
* Originalzustand wieder herstellen
* Zeilenauswahlmarkierung wieder anzeigen
=> Doppelklick auf eine Zelle:
* Editiermodus entsprechend des Parametertyps einleiten.
* BOOL => Listenauswahl FALSE/TRUE
* Numerisch => Werteingabe gemäß zulässigem Vorgabebereich

Ich werde aber trotzdem die Doku nochmal intensiv studieren und mal einen besseren Weg
in der Mannigfaltigkeit der Möglichkeiten des sevDataGrid suchen.

Trotzdem hat es eine ganze Weile gedauert, bis ich die Ursache eingrenzen konnte.
Sporadisch wurden falsche Werte ermittelt und viel schlimmer, es traten
"Speicherfehler" und somit Exceptions auf, die dann auch noch in der IDE und als
EXE unterschiedlich waren.

Jetzt verwende ich separate ListItem-Objekte und es sieht aktuell ganz gut aus.

Kannst Du mir evtl. kurz ein Stichwort nennen, wie ein besserer Ansatz
gehen könnte?

Vielen Dank schon jetzt.

Tschaui
Woellmi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel