Richasantos Posted March 24, 2013 at 05:49 PM Report #500202 Posted March 24, 2013 at 05:49 PM (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 March 24, 2013 at 05:54 PM by Richasantos
acao Posted March 24, 2013 at 09:17 PM Report #500231 Posted March 24, 2013 at 09:17 PM boas veja este exemplo http://www.macoratti.net/11/06/vbn_tvl1.htm cumps acao
Richasantos Posted March 24, 2013 at 10:48 PM Author Report #500243 Posted March 24, 2013 at 10:48 PM O pensamento é o mesmo para mover na mesma listbox?
acao Posted March 24, 2013 at 11:29 PM Report #500249 Posted March 24, 2013 at 11:29 PM 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
ribeiro55 Posted March 25, 2013 at 10:49 AM Report #500275 Posted March 25, 2013 at 10:49 AM (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 March 25, 2013 at 10:49 AM 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"
Richasantos Posted March 25, 2013 at 04:10 PM Author Report #500315 Posted March 25, 2013 at 04:10 PM 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?
ribeiro55 Posted March 25, 2013 at 04:47 PM Report #500321 Posted March 25, 2013 at 04:47 PM 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"
Richasantos Posted March 25, 2013 at 04:48 PM Author Report #500322 Posted March 25, 2013 at 04:48 PM (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 March 25, 2013 at 04:50 PM by Richasantos
acao Posted March 25, 2013 at 04:50 PM Report #500323 Posted March 25, 2013 at 04:50 PM (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 March 25, 2013 at 04:52 PM by acao
ribeiro55 Posted March 25, 2013 at 05:04 PM Report #500326 Posted March 25, 2013 at 05:04 PM 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"
Richasantos Posted March 25, 2013 at 05:08 PM Author Report #500327 Posted March 25, 2013 at 05:08 PM 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...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now