Jump to content
Richasantos

Botão UP/Down - Listbox

Recommended Posts

Richasantos

Boas pessoal,

Estou aqui com um pequeno problema. Tenho uma listbox, onde queria usar um botao up e outro down, para mover os items dentro da listbox. Tenho este código:

Dim posi As Integer = ListBox1.SelectedIndex
 If posi = ListBox1.Items.Count - 1 OrElse posi = -1 Then Return
 Dim text As String = ListBox1.SelectedItem
 ListBox1.Items.RemoveAt(posi)
 ListBox1.Items.Insert(posi + 2, text)
 ListBox1.SelectedIndex = posi + 1

Quando uso os botoes, apenas ando de item para item... sem os conseguir mover... qual é problema?

Cumps

Edited by Richasantos

Share this post


Link to post
Share on other sites
acao

boas

assim moves o item selecionado para o fim da list box, mas para gerir bem os dados é melhor ordenalos antes de carregar a list box

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim i As Integer = 0
    For i = 0 To ListBox1.SelectedItems.Count - 1
	    ListBox1.Items.Add(ListBox1.SelectedItem)
	    ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
    Next
   End Sub

cumps

acao

Share this post


Link to post
Share on other sites
ribeiro55

O teu código parece bem. Só estás a somar 2 onde deverias somar apenas 1:

    Private Sub ParaCima()
       If ListBox1.SelectedItems.Count <> 1 OrElse
           ListBox1.SelectedIndex = 0 Then Exit Sub
       Dim selI As Integer = ListBox1.SelectedIndex
       Dim tmpI As Object = ListBox1.SelectedItem
       ListBox1.Items.Remove(tmpI)
       ListBox1.Items.Insert(selI - 1, tmpI)
       ListBox1.SelectedIndex = selI - 1
   End Sub

   Private Sub ParaBaixo()
       If ListBox1.SelectedItems.Count <> 1 OrElse
           ListBox1.SelectedIndex = ListBox1.Items.Count - 1 Then Exit Sub
       Dim selI As Integer = ListBox1.SelectedIndex
       Dim tmpI As Object = ListBox1.SelectedItem
       ListBox1.Items.Remove(tmpI)
       ListBox1.Items.Insert(selI + 1, tmpI)
       ListBox1.SelectedIndex = selI + 1
   End Sub

Edited by ribeiro55

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
Richasantos

O teu código parece bem. Só estás a somar 2 onde deverias somar apenas 1:

	Private Sub ParaCima()
	If ListBox1.SelectedItems.Count <> 1 OrElse
		ListBox1.SelectedIndex = 0 Then Exit Sub
	Dim selI As Integer = ListBox1.SelectedIndex
	Dim tmpI As Object = ListBox1.SelectedItem
	ListBox1.Items.Remove(tmpI)
	ListBox1.Items.Insert(selI - 1, tmpI)
	ListBox1.SelectedIndex = selI - 1
End Sub

Private Sub ParaBaixo()
	If ListBox1.SelectedItems.Count <> 1 OrElse
		ListBox1.SelectedIndex = ListBox1.Items.Count - 1 Then Exit Sub
	Dim selI As Integer = ListBox1.SelectedIndex
	Dim tmpI As Object = ListBox1.SelectedItem
	ListBox1.Items.Remove(tmpI)
	ListBox1.Items.Insert(selI + 1, tmpI)
	ListBox1.SelectedIndex = selI + 1
End Sub

Pois... o problema é que eu também achava isso... só que com esse código... ele não move os items... apenas selecciona os items abaixo ou acima...:/ Será uma configuração non-code da listbox?

Share this post


Link to post
Share on other sites
ribeiro55

Quando eu coloco código no fórum é porque o estou a copiar directamente da IDE, acabado de testar, salvo quando indico que estou a fazer de cabeça.

Esse código, assim como o teu com o devido ajuste na soma/subtração, funciona.

Só me estou a lembrar de uma situação em que possa ter esse tipo de comportamento: se a listbox estiver databinded.

Como estás a preencher a listbox?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
Richasantos

Quando eu coloco código no fórum é porque o estou a copiar directamente da IDE, acabado de testar, salvo quando indico que estou a fazer de cabeça.

Esse código, assim como o teu com o devido ajuste na soma/subtração, funciona.

Só me estou a lembrar de uma situação em que possa ter esse tipo de comportamento: se a listbox estiver databinded.

Como estás a preencher a listbox?

A listbox estou a preencher através do uso de um dicionário... Basicamente quando o programa abre, vai buscar a informação a um ficheiro .dat, essa informação adiciona ao dicionário novamente, e depois informação a listbox. O problema é que esta informação é composta por várias strings, e não apenas pelas keys...

P.S.: Em que zona do forum posso postar um topico com os programas criados por mim? Eu comecei a aprender sozinho, e já fiz quatro programas... gostava de colocá-los aqui para o pessoal testar e dar opiniões...

Cumps

Edited by Richasantos

Share this post


Link to post
Share on other sites
acao

boas

tente entao assim

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
	Dim i As Integer = 0
	For i = 0 To ListBox1.SelectedItems.Count - 1
		If ListBox1.SelectedIndex < ListBox1.Items.Count - 1 Then
			ListBox1.Items.Insert(2 + ListBox1.SelectedIndex, ListBox1.SelectedItem)
			ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
		End If
	Next
End Sub

cumps

acao

edit: peço desculpa mas postaram enquanto eu postei

Edited by acao

Share this post


Link to post
Share on other sites
ribeiro55
Em 25/03/2013 às 16:48, Richasantos disse:

A listbox estou a preencher através do uso de um dicionário... Basicamente quando o programa abre, vai buscar a informação a um ficheiro .dat, essa informação adiciona ao dicionário novamente, e depois informação a listbox. O problema é que esta informação é composta por várias strings, e não apenas pelas keys...

Isto é inconclusivo. Continuo a não ver razão para não funcionar a não ser qualquer confusão que estejas aí a fazer com essas "várias strings".

Lembra-te que uma ListBox aceita Objects. Não apenas necessáriamente Strings.

Se o teu objecto pode ser representado por uma String, mas compreende uma série de outras propriedades... usa uma classe ou uma structure para adicionares à ListBox, e não uma String.

Em 25/03/2013 às 16:48, Richasantos disse:

P.S.: Em que zona do forum posso postar um topico com os programas criados por mim? Eu comecei a aprender sozinho, e já fiz quatro programas... gostava de colocá-los aqui para o pessoal testar e dar opiniões...

Presumo que seja software proprietário.

Assim sendo, podes colocar aqui: http://www.portugal-a-programar.pt/forum/43-software-proprietario/

(Garantindo que estás a respeitar as regras.)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
Richasantos
Em 25/03/2013 às 17:04, ribeiro55 disse:

Isto é inconclusivo. Continuo a não ver razão para não funcionar a não ser qualquer confusão que estejas aí a fazer com essas "várias strings".

Lembra-te que uma ListBox aceita Objects. Não apenas necessáriamente Strings.

Se o teu objecto pode ser representado por uma String, mas compreende uma série de outras propriedades... usa uma classe ou uma structure para adicionares à ListBox, e não uma String.

Presumo que seja software proprietário.

Assim sendo, podes colocar aqui: http://www.portugal-a-programar.pt/forum/43-software-proprietario/

(Garantindo que estás a respeitar as regras.)

Obrigado pela resposta :) Usei uma structure e isso resolveu o assunto :) Thanks...

Cumps...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.