Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: DRAGDROP i Multiselect
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004
DRAGDROP i Multiselect

Witam

Mam pytanko:

"W Jaki sposób przeciągnąć między dwoma kontrolkami ListView kilka zaznaczonych pozycji (multiselect)"

Pozdrawiam i czekam na porady


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-08-2004 00:08
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Przypusmy, ze mamy dwie kontroli List:
List1
List2

Ustawiasz:
List1.OLEDragMode = 1
List2.OLEDragDrop = 1

Dodajesz kod do formy:
Private Sub List2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim sBuffer() As String
    Dim CX As Integer
   
    sBuffer() = Split(Data.GetData(1), vbCrLf)
    For CX = 0 To UBound(sBuffer)
        List2.AddItem sBuffer(CX)
    Next
End Sub

Oczywiście potem urozmaicasz według potrzeb.

[Post edytowany dnia 02-08-2004 06:33 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-08-2004 06:33
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Tylko, że chodziło mi o ListView a nie ListBox

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-08-2004 09:58
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Przypuśćmy, że mamy dwie kontrolki ListView:
ListView1
ListView2

Ustawiasz:
ListView1.OLEDragMode = 1
ListView2.OLEDragDrop = 1

Dodajesz kod do formy:
Private Sub ListView1_OLEStartDrag(Data As MSComctlLib.DataObject, AllowedEffects As Long)
    Dim li As ListItem
    Dim sData As String
   
    For Each li In ListView1.ListItems
        If li.Selected Then sData = sData & li.Text & vbCrLf
    Next
    Data.SetData sData, 1
End Sub

Private Sub ListView2_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim sBuffer() As String
    Dim cx As Integer
    Dim li As ListItem
   
    sBuffer() = Split(Data.GetData(1), vbCrLf)
    For cx = 0 To UBound(sBuffer)
        Set li = ListView2.ListItems.Add()
        li.Text = sBuffer(cx)
    Next
End Sub


[Post edytowany dnia 02-08-2004 19:34 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

02-08-2004 19:33
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Oki dzięki ale rozwiązałem to trochę krótszym kode z wykorzystaniem funkcji API:

Private Sub ListView2_OLEDragDrop(Data As ComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Dim SelItem As Long
Dim SelCount As Long
Dim Counter As Integer

SelCount = SendMessage(ListView1.hwnd, LVM_GETSELECTEDCOUNT, 0, 0)
SelItem = -1

For Counter = 1 To SelCount
SelItem = SendMessage(ListView1.hwnd, LVM_GETNEXTITEM, SelItem, ByVal LVNI_SELECTED)
ListView2.ListItems.Add Text:=ListView1.ListItems(SelItem + 1).Text

Next Counter

End Sub

Dzięki za pomoc. Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

02-08-2004 20:30
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Wszystkich odpowiedzi: 4 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1