¿Eliminar elementos de un listbox en VB?
Resuelto
nico8002
Mensajes publicados
85
Estado
Miembro
-
sky -
sky -
Hola a todos,
tengo un Select que me muestra los resultados en una lista y me gustaría poder retirar elementos de esta lista.
Quisiera hacer clic en un nombre de mi lista y hacer clic en un botón "retirar"
¿Tienen algunas ideas de código?
Gracias de antemano.
Configuración: Windows XP / Internet Explorer 6.0
tengo un Select que me muestra los resultados en una lista y me gustaría poder retirar elementos de esta lista.
Quisiera hacer clic en un nombre de mi lista y hacer clic en un botón "retirar"
¿Tienen algunas ideas de código?
Gracias de antemano.
Configuración: Windows XP / Internet Explorer 6.0
13 respuestas
ah, pero en realidad no quiero eliminarlo de mi base, solo quiero quitarlo de mi lista.
¿tendrías alguna idea de cómo hacerlo?
porque estoy empezando con vb, estoy un poco perdido :s
¿tendrías alguna idea de cómo hacerlo?
porque estoy empezando con vb, estoy un poco perdido :s
Hola,
tienes que recuperar el índice de los elementos a eliminar (índice i por ejemplo).
Luego, puedes hacer :
tienes que recuperar el índice de los elementos a eliminar (índice i por ejemplo).
Luego, puedes hacer :
ListBox1.Items.RemoveAt(i)
No soy muy imaginativo esta mañana, pero podrías crear una segunda tabla similar a la primera en la que harías una copia de tu tabla fuente. Para retirarle elementos, los eliminarías como te lo propuse más arriba.
Es una solución muy sucia, lo reconozco y seguramente podrás encontrar algo mejor.
También puedes considerar almacenar aquellos que deseas conservar en otra tabla, en lugar de eliminar lo que ya no quieres, pero eso no es mucho mejor.
¿Qué uso piensas darle a tu lista depurada, en realidad?
Es una solución muy sucia, lo reconozco y seguramente podrás encontrar algo mejor.
También puedes considerar almacenar aquellos que deseas conservar en otra tabla, en lugar de eliminar lo que ya no quieres, pero eso no es mucho mejor.
¿Qué uso piensas darle a tu lista depurada, en realidad?
Lo que pasa es que tengo una base de datos con una lista de máquinas
y voy a tener que enviar un archivo a ciertas máquinas
por lo que muestro las máquinas (presentes en mi base) en un listbox
y me gustaría retirar en el listbox las que no quiero enviar mi archivo, solo a las que deseo enviar.
y voy a tener que enviar un archivo a ciertas máquinas
por lo que muestro las máquinas (presentes en mi base) en un listbox
y me gustaría retirar en el listbox las que no quiero enviar mi archivo, solo a las que deseo enviar.
Chrij, hice esto
Dim ItemObject(9) As System.Object
Dim i As Integer
For i = 0 To 9
ItemObject(i) = "Item" & i
Next i
LB_ListeMachines.Items.RemoveAt(i)
pero cuando ejecuto mi aplicación y hago clic en el botón, me resalta en amarillo la línea que he subrayado.
Dim ItemObject(9) As System.Object
Dim i As Integer
For i = 0 To 9
ItemObject(i) = "Item" & i
Next i
LB_ListeMachines.Items.RemoveAt(i)
pero cuando ejecuto mi aplicación y hago clic en el botón, me resalta en amarillo la línea que he subrayado.
¿Qué error te da?
Con lo que acabas de escribir, vas a quitar el objeto cuyo índice es 9 de tu lista (el último i = 9).
Según lo que has escrito al principio, quieres eliminar lo que seleccionas en la lista. Si es eso, puedes hacer:
Con lo que acabas de escribir, vas a quitar el objeto cuyo índice es 9 de tu lista (el último i = 9).
Según lo que has escrito al principio, quieres eliminar lo que seleccionas en la lista. Si es eso, puedes hacer:
For Each item In ListBox1.SelectedItems ListBox1.Items.Remove(item) Next
Dim ObjetDataSet As DataSet
ObjetDataSet.Clear()
For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next
He hecho esto, pero se subraya en verde lo que he subrayado y me dice:
"La variable 'ObjetDataSet' se utiliza antes de que se le haya asignado un valor. Se puede producir una excepción de referencia nula en tiempo de ejecución."
ObjetDataSet.Clear()
For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next
He hecho esto, pero se subraya en verde lo que he subrayado y me dice:
"La variable 'ObjetDataSet' se utiliza antes de que se le haya asignado un valor. Se puede producir una excepción de referencia nula en tiempo de ejecución."
de hecho no funciona,
Dim DT As New DataTable
DT.Clear()
For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next
veo que hice lo que me dijiste para mi datasource pero sigue subrayando lo mismo y me dice el mismo error
Dim DT As New DataTable
DT.Clear()
For Each item In LB_ListeMachines.SelectedItems
LB_ListeMachines.Items.Remove(item)
Next
veo que hice lo que me dijiste para mi datasource pero sigue subrayando lo mismo y me dice el mismo error
Acabo de hacer una prueba rápida que parece funcionar:
Normalmente solo borra los elementos seleccionados.
Dim lista Como ListBox.SelectedIndexCollection lista = ListBox1.SelectedIndices Para Cada item En lista ListBox1.Items.RemoveAt(item) Siguiente
Normalmente solo borra los elementos seleccionados.
Tengo un botón "mostrar" para poner en el cuadro de lista todos los nombres que están en mi base
después, en mi base cada máquina posee un sector, hay 2 en mi caso
así que tengo una casilla de verificación que me muestra las máquinas de uno de los 2 sectores y otra que hace lo contrario.
así que no hay nada que seleccione mis elementos.
después, en mi base cada máquina posee un sector, hay 2 en mi caso
así que tengo una casilla de verificación que me muestra las máquinas de uno de los 2 sectores y otra que hace lo contrario.
así que no hay nada que seleccione mis elementos.
Bonjour,
Aparentemente estás en VB.Net, no conozco la sintaxis pero en VB6 escribiría...
A ti de transcribir en .net
A=
--
La experiencia instruye más seguramente que el consejo. (André Gide)
Si te golpeas contra una maceta y suena hueco, no necesariamente es la maceta la que está vacía. ;-)(Confucio)
Aparentemente estás en VB.Net, no conozco la sintaxis pero en VB6 escribiría...
For i = ListBox1.Count - 1 To 0 Step -1 If ListBox1.Selected(i) Then ListBox1.RemoveItem (i) i = i - 1 End If Next i
A ti de transcribir en .net
A=
--
La experiencia instruye más seguramente que el consejo. (André Gide)
Si te golpeas contra una maceta y suena hueco, no necesariamente es la maceta la que está vacía. ;-)(Confucio)
Bueno, lo que está bien es que trabajamos con la misma versión de vb.
Lo que está menos bien es que yo no tengo problemas.
¿Puedes mostrarme la función que llena tu listbox?
Lo que está menos bien es que yo no tengo problemas.
¿Puedes mostrarme la función que llena tu listbox?
Sub privado B_Afficher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Afficher.Click
Dim DT As New DataTable
DT.Clear()
Dim oleDbConnex As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\...\BDD.mdb")
Dim oleCmd As New OleDb.OleDbCommand("SELECT NomMachine FROM Machine", oleDbConnex)
Try
Dim TA As New OleDb.OleDbDataAdapter(oleCmd)
TA.Fill(DT)
With LB_ListeMachines
.ValueMember = "NomMachine"
.DisplayMember = "NomMachine"
.DataSource = DT
End With
Catch ex As Exception
MessageBox.Show("¡Imposible establecer la conexión con la base de datos! " & ex.Message)
End Try
For i = 0 To LB_ListeMachines.Items.Count - 1
LB_ListeMachines.SetSelected(i, False)
Next
End Sub
Dim DT As New DataTable
DT.Clear()
Dim oleDbConnex As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\...\BDD.mdb")
Dim oleCmd As New OleDb.OleDbCommand("SELECT NomMachine FROM Machine", oleDbConnex)
Try
Dim TA As New OleDb.OleDbDataAdapter(oleCmd)
TA.Fill(DT)
With LB_ListeMachines
.ValueMember = "NomMachine"
.DisplayMember = "NomMachine"
.DataSource = DT
End With
Catch ex As Exception
MessageBox.Show("¡Imposible establecer la conexión con la base de datos! " & ex.Message)
End Try
For i = 0 To LB_ListeMachines.Items.Count - 1
LB_ListeMachines.SetSelected(i, False)
Next
End Sub
He encontrado un enlace que propone una solución para llenar una listbox a partir de una base de datos.
https://codes-sources.commentcamarche.net/
En resumen, necesitarías poner:
No tengo una base de datos a mano para probar...
https://codes-sources.commentcamarche.net/
En resumen, necesitarías poner:
TA.Fill(DT) oleDbConnex.Close() for i=0 to DT.Rows.Count -1 LB_ListeMachines.Items.Add(DT.Rows(i)("NomColonne").toString) Next No tengo una base de datos a mano para probar...
Hola,
he estado mirando un poco desde ayer.
El problema es que ligas tu fuente de datos a tu lista: por lo tanto, no puedes modificar tu lista directamente (riesgo de modificar la base de datos) y tampoco puedes cerrar tu conexión (eso vacía la lista).
Hay que encontrar una forma de llenar de otra manera tu listbox para que use los datos sin estar ligado a la base.
La solución que había mencionado más arriba puede ser una forma de lograrlo.
he estado mirando un poco desde ayer.
El problema es que ligas tu fuente de datos a tu lista: por lo tanto, no puedes modificar tu lista directamente (riesgo de modificar la base de datos) y tampoco puedes cerrar tu conexión (eso vacía la lista).
Hay que encontrar una forma de llenar de otra manera tu listbox para que use los datos sin estar ligado a la base.
La solución que había mencionado más arriba puede ser una forma de lograrlo.
TA.Fill(DT) oleDbConnex.Close() for i=0 to DT.Rows.Count -1 LB_ListeMachines.Items.Add(DT.Rows(i)("NomColonne").toString) Next Lógicamente (pero, ¿es la informática una cuestión de lógica?? ;-)), esto recupera los datos y los añade a los elementos de la listbox (sin enlazarlos)
Dime tú si eso cambia algo.
Aquí está el código para el siguiente que estará en la misma situación que yo, lol.
El código de la función para llenar la listbox
Private Sub CKB_ChoixTodasMachines_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
DT.Clear()
Dim oleDbConnex As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\..\BDD.mdb")
Dim oleCmd As New OleDb.OleDbCommand("SELECT NomMachine FROM Machine ORDER BY NomMachine", oleDbConnex)
Try
Dim TA As New OleDb.OleDbDataAdapter(oleCmd)
LB_ListeMachines.Items.Clear()
TA.Fill(DT)
oleDbConnex.Close()
For i = 0 To DT.Rows.Count - 1
LB_ListeMachines.Items.Add(DT.Rows(i)("NomMachine").ToString)
Next
Catch ex As Exception
MessageBox.Show("¡Imposible establecer la conexión con la base de datos! !! " & ex.Message)
End Try
For i = 0 To LB_ListeMachines.Items.Count - 1
LB_ListeMachines.SetSelected(i, False)
Next
End Sub
El código de la función para quitar un elemento de la listbox
Private Sub B_Retirar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Retirar.Click
DT.Clear()
For i = LB_ListeMachines.Items.Count - 1 To 0 Step -1
If LB_ListeMachines.GetSelected(i) Then
LB_ListeMachines.Items.RemoveAt(i)
i = i - 1
End If
Next i
End Sub
El código de la función para llenar la listbox
Private Sub CKB_ChoixTodasMachines_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
DT.Clear()
Dim oleDbConnex As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\..\BDD.mdb")
Dim oleCmd As New OleDb.OleDbCommand("SELECT NomMachine FROM Machine ORDER BY NomMachine", oleDbConnex)
Try
Dim TA As New OleDb.OleDbDataAdapter(oleCmd)
LB_ListeMachines.Items.Clear()
TA.Fill(DT)
oleDbConnex.Close()
For i = 0 To DT.Rows.Count - 1
LB_ListeMachines.Items.Add(DT.Rows(i)("NomMachine").ToString)
Next
Catch ex As Exception
MessageBox.Show("¡Imposible establecer la conexión con la base de datos! !! " & ex.Message)
End Try
For i = 0 To LB_ListeMachines.Items.Count - 1
LB_ListeMachines.SetSelected(i, False)
Next
End Sub
El código de la función para quitar un elemento de la listbox
Private Sub B_Retirar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Retirar.Click
DT.Clear()
For i = LB_ListeMachines.Items.Count - 1 To 0 Step -1
If LB_ListeMachines.GetSelected(i) Then
LB_ListeMachines.Items.RemoveAt(i)
i = i - 1
End If
Next i
End Sub