Drag And Drop - p°etahovßnφ mezi ListBoxy

Jednφm z nejb∞₧n∞jÜφch scΘnß°∙, kde jsou operace Drag And Drop oΦekßvßny (a takΘ vysoce hodnoceny), zahrnujφ p°esouvßnφ polo₧ek z jednoho ListBoxu do druhΘho. Typicky jsou k dispozici i tlaΦφtka, ale ty pot°ebujφ dv∞ kliknutφ myÜi (v²b∞r polo₧ky a kliknutφ na tlaΦφtko). Mnohem efektivn∞jÜφ je vyu₧itφ metod Drag And Drop, proto₧e vy₧aduje pouze jednoduch² pohyb myÜφ (v²b∞r a ta₧enφ).

Pro nßsledujφcφ p°φklad vlo₧te na formulß° dva ListBoxy a nastavte vlastnost OLEDropMode na 1-Manual. P°idejte nßsledujφcφ k≤d:

Private Sub Form_Load()

    ' Napln∞nφ jednoho ListBoxu
    List1.AddItem "Jedna"
    List1.AddItem "Dva"
    List1.AddItem "T°i"
    List1.AddItem "╚ty°i"
    List1.AddItem "P∞t"

End Sub 

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, _
    X As Single, Y As Single)

    List1.OLEDrag   
' ZaΦßtek p°etahovßnφ

End Sub

Private Sub List1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)

    ' Povolen pouze p°esun
    AllowedEffects = vbDropEffectMove
    ' P°i°azenφ v²b∞ru v ListBoxu do DataObject
    Data.SetData List1

End Sub

Private Sub List2_OLEDragDrop(Data As DataObject, Effect As Long, _
    Button As Integer, Shift As Integer, X As Single, Y As Single)

    Dim strList As String
    ' Test formßtu dat v DataObject
    If Not Data.GetFormat(vbCFText) Then Exit Sub
    ' Zφskßnφ textu z  DataObject
    strList = Data.GetData(vbCFText)
    List2.AddItem strList

End Sub

Private Sub List1_OLECompleteDrag(Effect As Long)

    ' Odebrßnφ polo₧ky z ListBoxu
    List1.RemoveItem List1.ListIndex

End Sub

V udßlosti OLEStartDrag jsme p°i°adili vybranou polo₧ku ve zdrojovΘm ListBoxu do DataObject. Nepot°ebujeme specifikovat formßt, DataObject sßm rozpoznß text. V udßlosti OLEDragDrop cφlovΘho ListBoxu je pou₧ita metoda GetFormat pro DataObject, abychom se ujistili, ₧e DataObject obsahuje text - pokud bychom se pokouÜeli p°etßhnout jin² typ dat, tak by to mohlo celΘ padnout. vbCFText je konstanta z kolekce ClipBoardConstants.

Jist∞ jste si vÜimli, ₧e v²stup z metody GetData jsme p°i°adili do prom∞nnΘ typu String. Je to z toho d∙vodu, ₧e p°idßvßnφ polo₧ek do ListBoxu se d∞je pomocφ metody AddItem. Pro TextBox by mohl b²t v²stup p°i°azen p°φmo:

Text1.Text = Data.GetData(vbCFText)

Techniky, pou₧itΘ v tomto p°φklad∞ budou pracovat tam, kde pot°ebujete p°etahovat text - mezi prvky a formulß°i, mezi formulß°i nebo mezi VaÜφ aplikacφ a jin²mi aplikacemi, jako je nap°φklad Microsoft Word, pokud podporujφ techniky Drag And Drop.

Zp∞t DalÜφ

Autor: The Bozena