Stránka 1 z 1

Listbox-posuv v listboxu řádků s více sloupci

Napsal: 06 pro 2012 17:14
od Fanatig
Dobrý den,tak a je tu další zádrhel s Listboxem.
V listboxu mam několik řádků s 10 sloupci.A tu a tam bych potřeboval zaměnit určitý řádek buď o řád výš nebo o řád níže.
Kód co používám přesouvá pouze první sloupec a ostatní vymaže.Poradíte někdo prosím co s tím?

Zatím používám tyto kódy:

Private Sub Nahoru_Click()
If ListBox1.ListIndex <= 0 Then Exit Sub
PocetPolozek = ListBox1.ListCount
Dim DocasnySeznam()
ReDim DocasnySeznam(0 To PocetPolozek - 1)
'Naplnime pole položkami seznamu
For i = 0 To PocetPolozek - 1
DocasnySeznam(i) = ListBox1.List(i)
Next i
'určime vybranou položku
CisloPolozky = ListBox1.ListIndex
'Prohodíme položky

DocasnaPolozka = DocasnySeznam(CisloPolozky)
DocasnySeznam(CisloPolozky) = DocasnySeznam(CisloPolozky - 1)
DocasnySeznam(CisloPolozky - 1) = DocasnaPolozka
ListBox1.List = DocasnySeznam

'Změníme vybranou položku
ListBox1.ListIndex = CisloPolozky - 1

End Sub

Private Sub Dolu_Click()
If ListBox1.ListIndex = ListBox1.ListCount - 1 Then Exit Sub
PocetPolozek = ListBox1.ListCount
Dim DocasnySeznam()
ReDim DocasnySeznam(0 To PocetPolozek - 1)
'Naplníme pole položkami seznamu
For i = 0 To PocetPolozek - 1
DocasnySeznam(i) = ListBox1.List(i)
Next i
'Určíme vybranou položku
CisloPolozky = ListBox1.ListIndex
'Změníme vybranou položku
DocasnaPolozka = DocasnySeznam(CisloPolozky)
DocasnySeznam(CisloPolozky) = DocasnySeznam(CisloPolozky + 1)
DocasnySeznam(CisloPolozky + 1) = DocasnaPolozka
ListBox1.List = DocasnySeznam
'Změníme vybranou položku
ListBox1.ListIndex = CisloPolozky + 1
End Sub

Re: Listbox-posuv v listboxu řádků s více sloupci  Vyřešeno

Napsal: 08 pro 2012 21:49
od Fanatig
tak po dlouhým hledání na netu jsem našel kód mého řešení

Private Sub Nahoru_Click()

MoveItem -1

End Sub

Private Sub Dolu_Click()

MoveItem 1

End Sub

Private Sub MoveItem(lOffset As Long)

Dim aTemp() As String
Dim i As Long

With Me.ListBox1
If .ListIndex > -1 Then
ReDim aTemp(0 To .ColumnCount - 1)
For i = 0 To .ColumnCount - 1
aTemp(i) = .List(.ListIndex + lOffset, i)
.List(.ListIndex + lOffset, i) = .List(.ListIndex, i)
.List(.ListIndex, i) = aTemp(i)
Next i
End If
End With
End Sub

--- Doplnění předchozího příspěvku (09 Pro 2012 00:38) ---

jen to chce ještě doladit,když to bude na prvním řádku a omylem se klikne na tlačítko tak to nahlásí chybu to stejný provádí při poslední položce