Miten sais helposti toteutettua, että tavallisesta Listboxsista sais valittua hiiren oikealle ja vasemalle nappulalle omat toiminnot?
Ja mitenkä DirListBox:sta saa valittua ilman tuplaklikkausta toiminnon?
Kirjoita tapahtumat Click-eventin sijasta MouseUppiin, niin tieto siitä, mitä nappia käyttäjä painoi löytyy muuttujasta 'Button'.
DirListBoxista löytyy yhtälailla nuo Click- ja MouseUp-eventit siinä, missä tavallisestakin.
Milu kirjoitti:
Miten sais helposti toteutettua, että tavallisesta Listboxsista sais valittua hiiren oikealle ja vasemalle nappulalle omat toiminnot?
Kirjoita koodi MouseDown-tapahtumaan:
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case Button
Case 1
MsgBox "Nyt painettiin vasenta nappia!"
Case 2
MsgBox "Nyt painettiin oikeaa nappia!"
End Select
End SubMilu kirjoitti:
Ja mitenkä DirListBox:sta saa valittua ilman tuplaklikkausta toiminnon?
Mitä tarkoitat? Ai että hakemisto avautuu, kun sitä painaa vain kerran hiirellä?
muok: Joo, MouseUp vastaa lähemmin Click-tapahtumaa.
Kiitoksia !
Joo, että saisi hakemiston auki vain kerran klikkaamalla.
Homma hoituu ainakin tämmöisellä koodilla:
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Sub Dir1_Click()
' luulotellaan, että hiirtä onkin painettu kahdesti
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End SubTietääkö kukaan parempaa tapaa?
Vaikka Click-tapahtumaan tällainen koodi:
Dir1.Path = Dir1.List(Dir1.ListIndex)
Tuo on tosiaan paljon parempi tapa ja toimii oikein myös nuolinäppäimillä ohjattaessa toisin kuin omani.
Onko tää nyt tehty alusta asti vähä väärin.
Tarkoitus olisi, että List2:een aukeaisi kaikki tiedostot jossa on tiedostopäätteenä numero ja ne tulisivat sinne numerojärjestykseen ei aakkos, sitten kerran hiiren oikealla näppäimella klikkaamalla kysyy poistetaanko tiedosto vai ei.
Nyt toimii sillein, että täytyy ekana vasemalla valita ja sitten vasta oikealla poisto jollon tiedosto muuttuja saa tiedoston nimen muuttujaan.
Sit vielä se hakemistot auki yhdellä klikkauksella.
Miten tota koodia täytyy muuttaa?
_____________________________
Private Sub Form_Load()
File1.Pattern = ("*.0*;*.1*;*.2*;*.3*;*.4*;*.5*;*.6*;*.7*;*.8*;*.9*")
End Sub
______________________________
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
___________________________
Private Sub Dir1_Change()
Dim i As Integer
List2.Clear: List1.Clear
File1.Path = Dir1.Path
For i = 0 To File1.ListCount - 1
List1.AddItem Right(File1.List(i), 3)
List2.AddItem File1.List(i), List1.NewIndex
Next i
End Sub
__________________________________________
Private Sub List2_Click()
tiedostonimi = File1.Path & "\" & List2
End Sub
__________________________________________________
Private Sub list2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then poista
End Sub
______________________________________________________
Private Sub poista()
Dim arvo As Integer
arvo = MsgBox(tiedostonimi, 4, "Poistetaako tiedosto: ? ")
If arvo = 6 Then Kill tiedostonimi: File1.Refresh
End Sub
______________________________________Mod. Edit: Kooditagit
Koeta tehdä rekursiivinen kutsu tuonne list2:n mousedown-subbiin siten, että kun klikataan oikealla napilla niin lähetetään ensin klikkaus vasemmalla. Tiedä sitten toimiiko...
Private Sub list2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then List2_Click poista end if End Sub
Dir1.Path = Dir1.List(Dir1.ListIndex)
juu toi on hyvä, mut tuo List2_Click ei kyllä mulla ainakaan toiminnut, olisko siihen muuta keinoa?
Aihe on jo aika vanha, joten et voi enää vastata siihen.