Avatar billede moba Nybegynder
29. januar 2007 - 22:55 Der er 6 kommentarer

Træk og slip en række fra formular

Hejsa
Jeg har brug for at kunne venstreklikke på en række i et dataark, holde musetasten nede, og derefter flytte rækken til eksempelvis et tekstfelt. Dvs. når musetasten slippes over et objekt (gerne et tekstfelt eller lignende) skal en af værdierne (nøglen) fra rækken skrives i objektet.
Avatar billede moba Nybegynder
29. januar 2007 - 23:00 #1
Jeg er delvist ude i samme problemstilling som http://www.eksperten.dk/spm/391787
Jeg har blot ikke behov for at trække noget fra en underformular til en anden. Men kun drag & drop delen.
Avatar billede moba Nybegynder
29. januar 2007 - 23:39 #2
har lige forsøgt mig med eksemplet fra nedenstående.
http://support.microsoft.com/kb/233274/EN-US/

Det virker sådan set fint, men skal dog modificeres noget.
Jeg giver gerne point for bedre løsninger, ellers kører jeg udgangspunkt i ovenstående eksempel
Avatar billede jesperfjoelner Nybegynder
30. januar 2007 - 01:56 #3
Drag'n'drop bliver hurtigt ret avanceret, men i princippet skal du bruge en global variabel

Public lRecordID as long
(sættes øverst i et modul, ikke formularens modul)

Når du trykker museknappen ned i et felt i din underformular skal en funktion køres som sætter værdien af din post i lGlobal:

Function fSetID()
  lRecordID = Me!IDfelt
End function

den skal så køre f.eks. i et felt mousedown-event:

Private Sub Tekst0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  lRecordID = 10
End Sub

Så er public-variablen sat.

Nu skal den fanges, når du slipper museknappen over f.eks. din textbox.
Hvis den textbox du slipper musen over også skal fungere som en normalt textbox med indtastningmuligheder, mulighed for at sætte markøren osv. skal du nok bruge en løsning i stil med:

I destinationsformularens DETALJESEKTIONs MouseMove event kan du hele tiden kontrollere "hvor" du er på formularen, ved at inspicere x og y.

Find ud af hvilke koordinater din destinationstextbox har. Det kan f.eks. være x=2000-3000 og y=2000-2200.

Når du slipper museknappen i destinations formularen skal du tjekke om din markør er indenfor textboxen rektangel, og hvis den er udføre den handling du vil lave, f.eks. en SQL-kørsel:

Private Sub Detaljesektion_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If x>2000 AND x<3000 AND y>2000 AND y<22000 Then
    'kør opdateringsSQL eller hvad du nu vil.
    currentdb.execute "INSERT INTO tabel1 (felt1) VALUES (" & lRecordID & ")",dbFailOnerror
  End if
End Sub

I al beskedenhed vil jeg gerne vise dig en database, jeg selv har lavet med en lignende løsning, hvor det godt nok er nogle firkantede textbokse, der flyttes (og der er en del anden funktionalitet også).
http://www.medicinskedatabaser.dk/fryserdatabase.asp
(scroll lidt ned for at se animationen)

Jeg mener jeg har fået de nødvendige skridt med i ovenstående, men der er formentlig brug for noget tilpasning.
Avatar billede jesperfjoelner Nybegynder
30. januar 2007 - 01:56 #4
Når musen slippes skal lRecordID nok altid nulstilles.
Avatar billede jesperfjoelner Nybegynder
30. januar 2007 - 02:15 #5
I mit eksempel har jeg en lille figur (f.eks. en box eller lignende) der som udgangspunkt er usynlig, men når musen trykkes det rigtige sted bliver boxen synlig og følger markøren så længe musen holdes nede. Det giver et indtryk af at man trækker "noget" hen over formularen.
Når musen slippes bliver den igen usynlig, for nu har man jo "sluppet" noget.
Avatar billede moba Nybegynder
30. januar 2007 - 14:55 #6
Kigger på det i morgen aften, tak for nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester