Jump to content

Recommended Posts

Posted (edited)

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
Posted

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

Posted (edited)

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"

Posted

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?

Posted

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"

Posted (edited)

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
Posted (edited)

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
Posted
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"

Posted
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...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.