In een bepaalde toepassing wilde ik meer controle krijgen over de klik en sleep akties in een form, omdat er verschillende mogelijke bronnen en bestemmingen waren. Ik weet niet of het een goed idee is, maar ik maakte er een apart object voor; zeg maar door een Class CDragDrop.
Daarin definieerde ik de nodige constanten.
Ik hield bij waar de klik en sleep vandaan kwam, en in geval van een tabel bv ook de coordinaten dmv rij en kolom in die tabel (row, col).
Ik definieerde een aantal mogelijke ontvangers in een array.
(deze zijn redelijk specifiek voor het scherm (Form) waarin ik werk)
bv:
' Gambas class file
' CDragDrop - to manage drag n drop
'
PUBLIC CONST Employee AS String = "employee"
PUBLIC CONST DestinationOne AS String = "destination1"
PUBLIC CONST DestinationTwo AS String = "destination2"
'
PRIVATE arrReceiver AS String[] = [Employee, DestinationOne, DestinationTwo]
Klik en sleep toestanden kan je bijhouden door methodes als:
Door procedures als
- setOrigin
- setReceiver
- getOrigin
- getReceiver
(deze zijn op zich redelijk universeel, invulling verschilt).
Ook kan je de bron en bestemmeling checken in de klasse.
Ik hergebruik het object van deze klasse:
PUBLIC SUB clear()
waarin ik alles leeg maak; maar je kan ook een nieuwe instantie maken en de gebruikte bijhouden als referentie (fifo lijstje?), als je nadien moet weten wat je vorige klik-en sleep aktie was.
English summary:
I created my own class to manage drag’n drop in my app. I can keep code away from my Form, and have all drag’n drop information at hand in one place. I could even keep the last action archived by keeping the previous instance(s) (in a FIFO array?).