[VB.net] Drag and Drop Auto Scroll FlowLayout

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 21:04

skate master

Autodesk Educator Expert

Topicstarter
Ik ben bezig met een Plugin op AutoCAD welke de aanwezige Layouts (tekenbladen) laat zien in een lijst.
Deze lijst is opgebouwd uit een FlowLayoutPanel met hierin per layout een custom control geladen.
Het vullen van de lijst werkt zoals bedacht, en ook mijn custom control doet netjes zijn werk.

Drag en Drop
Om de layouts te kunnen verschuiven heb ik Drag and Drop toegevoegd.
Zolang het item dat je wilt verschuiven binnen het deel van de FlowLayout blijft wat in beeld staat werkt het Drag and Drop. Echter zodra ik aan de rand van mijn FlowLayout kom verschuift de lijst slechts 1 item.
Ik kan dus vrij schuiven met de items zolang ik binnen het zichtbare deel van de lijst blijf.

Hoe zorg ik er nu voor dat mijn lijst automatisch omhoog of omlaag scrollt wanneer ik de rand bereik?
Ik ben er al te lang mee aan het zoeken en Googlen dat ik door de bomen het bos niet meer zie.

Wie kan mij het zetje geven dat ik nodig heb?

Het vullen van de lijst
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 Public Sub loadListItems()
    flowList.Controls.Clear()
    flowList.AllowDrop = True
    flowList.AutoScroll = True
    flowList.SetAutoScrollMargin(5,5)
    
    Dim iTabIndex As Integer = 1 
    For Each sTabName In listTab.Values
        myCntrl = New MyListItems.MyListItem()
        myCntrl.LayoutName = sTabName
        myCntrl.updateItem()
        myCntrl.TabIndex = iTabIndex
        AddHandler myCntrl.MouseMove, AddressOf item_MouseMove
        AddHandler myCntrl.DragEnter, AddressOf item_DragEnter
        myCntrl.ContextMenuStrip = SubMenu
        flowList.Controls.Add(myCntrl)
        iTabIndex += 1
    Next
End Sub


MouseMove en DragEnter
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Public Sub item_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    If e.Button = Forms.MouseButtons.Left Then
        Dim myCntrl As MyListItems.MyListItem = CType(sender, MyListItems.MyListItem)
        myCntrl.DoDragDrop(myCntrl, Windows.DragDropEffects.Move)
        'set dragstate of control
        myCntrl.GetDragged = False
        myCntrl.isDragged()
        'save new order
        setLayoutOrder()
    End If
End Sub

Public Sub item_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
    If e.Data.GetDataPresent(GetType(RN_LayoutItems.RN_UCLayoutItem)) Then
        e.Effect = Windows.DragDropEffects.All
        Dim myCntrlOver As Dim myCntrl As MyListItems.MyListItem = CType(sender, MyListItems.MyListItem)
        Dim myCntrlSrc As MyListItems.MyListItem = CType(e.Data.GetData(GetType(MyListItems.MyListItem)), MyListItems.MyListItem)

        Dim iIndexOver As Integer = flowList.Controls.IndexOf(myCntrlOver)
        flowList.Controls.SetChildIndex(myCntrlSrc, iIndexOver)
        'auto scroll list on drag
        flowList.ScrollControlIntoView(myCntrlSrc)
        'set dragstate of control
        myCntrlSrc.GetDragged = True
        myCntrlSrc.isDragged()
    End If
End Sub

Alle reacties


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
Handmatig gaan scrollen vanuit je MouseMove zodra je in de buurt van de onder/bovenkant van je lijst komt zou kunnen misschien.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • skate master
  • Registratie: September 2004
  • Laatst online: 21:04

skate master

Autodesk Educator Expert

Topicstarter
farlane schreef op vrijdag 24 november 2017 @ 11:43:
Handmatig gaan scrollen vanuit je MouseMove zodra je in de buurt van de onder/bovenkant van je lijst komt zou kunnen misschien.
Kun je mij misschien aangeven hoe je deze handmatige scroll voor je ziet?

Ik had stiekem gehoopt op een duwtje in de rug om dit werkend te krijgen, blijkbaar is het toch lastiger dan dat ik dacht.