Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Richasantos

Botão UP/Down - Listbox

Mensagens Recomendadas

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

Editado por Richasantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por Richasantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.