Avatar billede angelenglen Nybegynder
18. marts 2004 - 12:53 Der er 19 kommentarer og
1 løsning

kontrollere hvilken muse-knap der bliver clicket med

Jeg har en Combobox (standard dropdown menu)

denne har tilsyneladende ikke noger der hedder mousedown, og jeg kan tilsyneladende ikke hente button-variablen ud af den...

hvordan finder jeg ud af hvilken muse-knap der bliver trykket på?

jeg forestillede mig noget i stil med:


Private Sub Combo1_Click()
if button = left then
  msgbox "left"
end if
if button = right then
  msgbox "right"
end if
end sub

men naturligvis virker det ikke... hvad skal jeg gøre for at få det til at virke?
Avatar billede martin_moth Mester
18. marts 2004 - 13:02 #1
Avatar billede venne Nybegynder
18. marts 2004 - 13:12 #2
En hurtig søgning på Google gav denne: http://cuinl.tripod.com/Tips/controls3.htm

Måske er det noget du kan bruge?
Avatar billede peter.erikse Nybegynder
18. marts 2004 - 13:45 #3
Private Sub combo1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then
        msgbox "left"
    Else If Button = 1
        msgbox "right"
    End If
Avatar billede angelenglen Nybegynder
18. marts 2004 - 13:46 #4
peter.erikse: er du sikker på at combo1 understøtter _mousedown?
for jeg kan ikke få min til det?
kun _click....
Avatar billede peter.erikse Nybegynder
18. marts 2004 - 13:48 #5
Du har ret combo understøtter den ikke. Beklager.
Avatar billede angelenglen Nybegynder
18. marts 2004 - 14:55 #6
hmm well okay her er mit egentlige problem:

jeg har min combobox "nyheder" som indeholder en stak url's til nyheds-sites..

Private Sub Nyheder_Click()
  doNyheder
End Sub

det der så er problemet er, at idet man rører en hvilket som helst tast (udover ctrl osv) så reagerer den som om det var et click - og eksekverer den øverste på min liste.

det er rimeligt uholdbart, og i sidste ende ville jeg gerne kunne bruge piletasterne til at vælge min nyhed fra listen, og trykke enter for at aktivere den.
_keydown er også fin til det med enter-delen, men jeg når aldrig at vælge min nyhed på listen jo, for formen "tror" jeg clicker når jeg trykker på pil ned/op osv...

dog vil jeg stadig gerne have det sådan, at når jeg vælger min nyhed med musen, så bliver nyheden stadig eksekveret automatisk...


Martin_moth: din kunne ikke bruges, eftersom comboboxen ikke har en _mousedown ting.

venne: din kunne ikke bruges, for bl.a. kræver den at comboboxen er en "style = 2" - og min skal være "Style = 0" for at jeg kan skrive noget i selve feltet - Style = 2 er tom...
(derudover er den ret ustabil idet den kræver at form_unload bliver kørt for at den ikke skal crashe VB's enviroment..)
håber det giver mening, ellers kan jeg forsøge at forklare det lidt bedere...
Avatar billede martin_moth Mester
18. marts 2004 - 15:04 #7
Kan du ikke i KeyDown tjekke den tast der trykkes. Annuler tasten, hvis den ikke skal have nogen virkning, og udfør den handling du ønsker, hvis det er en tast, man gerne må bruge. Kan man ikke løse det sådan (har ikke VB til at teste med)
Avatar billede angelenglen Nybegynder
18. marts 2004 - 15:06 #8
hvordan skulle jeg kunne annulere tasten?
jeg har prøvet med:
Private Sub Nyheder_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyDown Or KeyCode = vbKeyUp Or KeyCode = vbKeyLeft Or KeyCode = vbKeyRight Then
  Else
  Nyheder.Text = "Nyheder"
  End If
End Sub
-det gør ingenting hvis der tastes på en af de anvendte taster, men alligevel bliver det betragtet som et click, og aktiverer _click
Avatar billede martin_moth Mester
18. marts 2004 - 15:24 #9
På en textbox kan du annulere tastetryk således:

Private Sub txtBox_KeyPress(KeyAscii As Integer)
  Select Case KeyAscii
    Case vbKeyReturn 'Enter-tast
      SendKeys "{tab}" 'Sender tabulatortegn i stedet for
    Case 48 To 57 'Tallene 0-9
    Case Else 'Alle andre tastetryk
      KeyAscii = 0 'Sletter det tastede tegn
  End Select
End Sub

I ovenstående kan man KUN taste tal og return, og return bliver lavet om til Tab.

Hvis du sætter en KeyAscii = 0 ind i din KeyPress, kan du annulere tastetrykket, før det sendes til kontrollen.
Avatar billede martin_moth Mester
18. marts 2004 - 15:26 #10
Altså

Private Sub Nyheder_KeyPress(KeyAscii As Integer)
  Select Case KeyAscii
    Case vbKeyDown
      msgbox "pil ned"
      'kode for pil ned - hvad du end vil have skal ske
    Case vbKeyUp
      msgbox "pil op"
      'kode for pil op - hvad du end vil have skal ske
    Case Else 'Alle andre tastetryk
      KeyAscii = 0 'Sletter det tastede tegn
  End Select
End Sub

Prøv at se om det virker, jeg kan ikke selv teste
Avatar billede angelenglen Nybegynder
18. marts 2004 - 15:33 #11
tror den er tæt på...
hvad skal jeg skrive for at den bare tager alle taster ukritisk?


Private Sub Nyheder_KeyPress(KeyAscii As Integer)
  Select Case KeyAscii
    Case Else All
      KeyAscii = 0 'Sletter det tastede tegn
  End Select
End Sub

virker ikke...


den du skrev virkede næsten, idet at alle andre taster end pil op og ned resulterede i at den skrev en msgbox (jeg tilføgede en test-msgbox før end select) - men pil op/ned aktiverede stadig _click
Avatar billede angelenglen Nybegynder
18. marts 2004 - 15:40 #12
Private Sub Nyheder_KeyPress(KeyAscii As Integer)
  Select Case KeyAscii
    Case vbKeyDown
      MsgBox "KeyDown"
      KeyAscii = 0 'Sletter det tastede tegn
  End Select
End Sub

den kommer ikke engang med keydown, men fortsætter bare med _click
-det kunne tyde på den behandler pile-tasterne specielt?
Avatar billede stry Nybegynder
18. marts 2004 - 16:43 #13
Piletasterne har ikke nogen Ascii-kode, kun en Keycode:
Pil venstre: 37
Pil op:      38
Pil højre:  39
Pil ned:    40
Avatar billede stry Nybegynder
18. marts 2004 - 16:48 #14
Så brug KeyDown.

Private Sub Nyheder_KeyDown(KeyCode As Integer, Shift As Integer)
....OSV.
End Sub
Avatar billede angelenglen Nybegynder
19. marts 2004 - 13:28 #15
stry hele problemet ligger i at en combobox ikke HAR en _mousedown................................
Avatar billede angelenglen Nybegynder
19. marts 2004 - 13:41 #16
hmm læste forkert... prøver lige...
Avatar billede angelenglen Nybegynder
19. marts 2004 - 13:43 #17
hmm nej. problemet ligger lidt i, at allerede ved keydown aktiverer piletasterne _click ...af en eller anden grund.. (ihvertfald pilop/ned)
Avatar billede martin_moth Mester
19. marts 2004 - 17:45 #18
Hvad vil du - skal piletasterne heller ikke virke? Så skal du jo bare slette Case vbKeyUp og Case vbKeyDown i mit svar 18/03-2004 15:26:39
Avatar billede angelenglen Nybegynder
20. marts 2004 - 04:30 #19
desværre, det prøvede jeg kort efter du havde skrevet det... det virker som om piletasterne er "hævet over loven" der...

I Bedste fald skulle piletasterne kunne "bladre" i listen, men som kompromis ville jeg gå med til at de var slået helt fra... men det kan jeg ikke få dem til.

grunden til de ikke virker til at bladre med, er at lige så snart man starter på at bladre, aktiverer den _click... -og det udenom keydown, keyup og keypress ser det ud til...
Avatar billede angelenglen Nybegynder
09. december 2004 - 16:00 #20
Jeg fandt ud af at det umiddelbart er umuligt.
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
Kurser inden for grundlæggende programmering

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