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
MouseMove en DragEnter
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 |