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 Sub
Milu 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 Sub
Tietää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.