DataGridView Mausklick abfangen

BLR

Erfahrenes Mitglied
#1
Hallo :)

ich habe folgendes Problem:

Wenn ich in einer Zelle was ändere und den Cursor dadrin blinken lasse.
Mit der Maus auf ein anderes Steuerelement draufklicke, z.B auf einen anderen Grid, dann möchte ich einen Hinweis ausgeben, dass etwas verändert wurde.
Leider komme ich nicht soweit, denn in dem Ereignis wo ich speichere "RowLeaved" wird das ganze vorher ausgeführt, sodass ich keinen Anhaltspunkt abfragen kann, dass man auf ein anderes Steuerelement geklickt hat.

Hinweis:
Wenn ich auf eine leere Form-Fläche draufklicke, dann kommt das MouseClick-Event von der Form dem RowLeave des Grids zuvor...sodass ich abfragen kann.
Aber wenn man auf ein Steuerelement klickt, dann ist "RowLeave" das erste, was ausgeführt wird.

Danke für jeden Tipp.
 

BLR

Erfahrenes Mitglied
#3
Danke dir für den Tipp.
Die Sache ist die, ich muss ja irgendwie festgestellt haben, dass ich bsp. auf einen anderen Steuerelement geklickt habe.
Um im Leave oder nem anderen Event des Grid´s zu sagen: "hier...du hast wo anders geklickt, willst grid speicher?"

Und irgendwie kriege ich das mit dieser "Control"-Eigenschaft das noch nicht so hin...
 

Spyke

Capoeirista
Premium-User
#5
Wenn de lust hast und der Code nicht zu groß ist, kannst ja mal dein Code posten.
Die mehrzahl "boolschen variablen" da frag ich mich nur grad obs "so viele" sein müssen.

Und ist das Grid eigentlich daten gebunden?
Dann wäre ev. ne möglichkeit auch gewessen mit BindingList und INotifyPropertyChanged das zu händeln.
 

BLR

Erfahrenes Mitglied
#6
ja klar :)

ich habe das so einprogrammiert, dass ich im RowLeave geschaut hab, obs dirty ist.
Das Problem dabei war, dass, wenn man wo anders klickt, dann springt er erst ins RowLeave und speichert schon sofrot und dann erst dahin, wo ich geklickt habe...

So habe ich im RowLeave einfach ne boolsche Variable, die beim Grid-MouseLeave-Event auf True gesetzt wird.
Dann springt er ins RowLeave geht aber nicht in die Speichermethode rein.
Danach kommt das Klick-Event von nem anderen Control.
In diesem Klick-Event wird wiederum ne "CheckToSave" Methode abgefragt, die feststellt, dass irgendwas nicht gespeichert war, und benachrichtigt einen.....

Also man muss einfach im RowLeave ne boolsche Variable drum setzen, damit er nicht sofort speichert, sondern an einer anderen Stelle. Der Code an sich finde ich ist zu spezifisch und würde nicht so viel bringen.

Das Grid ist gebuden, aber ich finde diese Lösung am einfachsten mit einer kleinen boolschen Variable als mit irgendwelchen "großen" Objekten.