Nefungující DragDrop   zodpovězená otázka

C#, VB.NET, WinForms

Zdravím,

dnes jsem narazil na problém, který nejsem sto vyřešit: mám Form a na něm ListBox, Form je AllowDrop pozitivní, ListBox stejně tak. Chytám událost ListBox.DragDrop. Událost se ale nevyvolá. Jenže problém je asi jinde, když jsem zkoušel přetáhnout soubor na ten ListBox, zobrazil se mi kurzor signalizující zakázanou operaci.

Prosím o nějaké nasměrování a děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste toto:

Private Sub ListBox1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListBox1.DragEnter
  If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then
    e.Effect = DragDropEffects.Copy
  End If
End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

DragDrop je málo, třeba ještě použít DragEnter

Aniž bych se zabýval výběrem položky, použiji první (jde o princip):

 Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
    ListBox1.DoDragDrop(ListBox1.SelectedItem, DragDropEffects.Copy)
  End Sub

  Private Sub ListBox2_DragEnter(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.DragEventArgs) Handles ListBox2.DragEnter
      e.Effect = DragDropEffects.Copy
  End Sub
 
  Private Sub ListBox2_DragDrop(ByVal sender As Object, ByVal e As _
     System.Windows.Forms.DragEventArgs) Handles ListBox2.DragDrop
     ListBox2.Items(0) = e.Data.GetData(DataFormats.Text, True)
  End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky pánové,

jaksi jsem předtím zapomněl uvést, že se jedná o přetahování souborů, pak mi tedy kód pana Rennera pracuje s úpravou skvěle:

    Private Sub ListBox2_DragDrop(ByVal sender As Object, ByVal e As  _
       System.Windows.Forms.DragEventArgs) Handles ListBox2.DragDrop
        MsgBox(e.Data.GetData(DataFormats.FileDrop, True)(0)) ' cesta k souboru
    End Sub

Ještě jednou díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravim,

mel bych dotaz, netyka se uplne tematu, ale souvisi to s pretahovanim souboru...

dejme tomu, ze chci do formulare pretahovat soubory(aplikace s priponou exe), treba do listboxu. Pokud tam soubor pretahnu budu hlidat, jetli ma priponu exe, to je ok, a ted k dotazu. Muzu zjistit cilovy soubor zastupce, abych se nemusel omezovat pouze na exe soubory, ale abych mohl pretahovat i zastupce(lnk)?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

http://forums.microsoft.com/MSDN/ShowPos...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

nasel jsem funkci, ktera dokaze jednoduse zjistit cil zastupce. Tady je...

    Private Function GetTargetPath(ByVal FileName As String)

        Dim Obj As Object
        Obj = CreateObject("WScript.Shell")

        Dim Shortcut As Object
        Shortcut = Obj.CreateShortcut(FileName)
        GetTargetPath = Shortcut.TargetPath
        Shortcut.Save()
    End Function

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jde to i pomocí přidání reference na COM rozhraní Windows Script Host Object Model a pak s tím lze pracovat objektově a bez Late Bindingu. Každopádně nevím proč voláte metodu Save která zástupce ukládá...

Public Shared Function GetTargetPath(ByVal shortcutPath As String) As String
  Static wshShellObject As Object
  If wshShellObject Is Nothing Then
    wshShellObject = CreateObject("WScript.Shell")
  End If
  Dim wshShortcut As Object = wshShellObject.CreateShortcut(shortcutPath)
  Return DirectCast(wshShortcut.TargetPath, String)
End Function

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

tenhle zpusob vyzkousim...

ten kod nahore jsem vygooglil, kdyz jsem ho zkousel, tak mi shazoval celou aplikaci. Bez toho ze by ohlasil nejakou vyjimku

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback