Autor
|
Tema: Pregunta Boba / como pasar registros desde un listbox a variables (Leído 7,532 veces)
|
luis456
Desconectado
Mensajes: 548
|
No se si me estoy volviendo senil o que ?  pero creia que seria facil ,pero por mas que busco en el foro o en san google no doy con la respuesta  poner desde una variable a un listbox si se hacerlo pero al contrario no Como C,, paso los registros de un listbox a una variable integer ? los registros van de esta forma o se muestran en listbox de esta manera y son en cantidad que van desde 10 al infinito de combinaciones de ese estilo 01 02 03 02 05 08 04 08 09 01 22 25 necesito meterlos en una variable integer para poder después trabajar con ellos Luis
|
|
« Última modificación: 7 Abril 2016, 18:07 pm por luis456 »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Lekim
Desconectado
Mensajes: 268
|
Hola
Si cada Item del ListBox contiene algo como esto "04 08 09", se tratan de cadenas STRING y NO lo puedes meter en una variable Integer. Ya que una variable integer solo acepta números de -2.147.483.648 a 2.147.483.647.
Y esto:
item 0 = "01 02 03" item 1 = "02 05 08" item 2 = "04 08 09"
no son números son cadenas String o de texto. Evidentemente el 1 es un número el 3 también, pero si lo pones "01 03" no es número. En cambio "0103" sí es un número, pero entonces "01" pierde su individualidad como número, ya que se trata del 103.
|
|
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
Hola
Si cada Item del ListBox contiene algo como esto "04 08 09", se tratan de cadenas STRING y NO lo puedes meter en una variable Integer. Ya que una variable integer solo acepta números de -2.147.483.648 a 2.147.483.647.
Y esto:
item 0 = "01 02 03" item 1 = "02 05 08" item 2 = "04 08 09"
no son números son cadenas String o de texto. Evidentemente el 1 es un número el 3 también, pero si lo pones "01 03" no es número. En cambio "0103" sí es un número, pero entonces "01" pierde su individualidad como número, ya que se trata del 103.
Es de este codigo que se hace la función que la mete en el listbox ¿ como se podría entonces en ves de ponerlos en el listbox que no importa sea string, por que se podría después convertir esa variable en integer ? Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click ListBox1.Items.Add("01 02 03 04 05 06") ListBox1.Items.Add("10 20 30 44 45 46") ListBox1.Items.Add("12 22 34 45 56 65") ListBox1.Items.Add("12 22 34 45 56 65") Dim Pattern As String = " " Dim Digito() As String Dim ClearList As New List(Of String)(ListBox1.Items.OfType(Of String)) For Each Item As String In ClearList Digito = System.Text.RegularExpressions.Regex.Split(Item, Pattern) If CInt(Digito(1)) = CInt(Digito(0)) + 1 And CInt(Digito(2)) = CInt(Digito(1)) + 1 And CInt(Digito(3)) = CInt(Digito(2)) + 1 And CInt(Digito(5)) = CInt(Digito(4)) + 1 And CInt(Digito(5)) = CInt(Digito(4)) + 1 Then ListBox1.Items.Remove(Item) <<<<<-----cambiar o poner datos en variable End If Next End Sub
Claro que despues de meterlos en esa variable se podria hacer algo como esto Dim MAl7 As IEnumerable(Of Integer) = Sp7 Dim Splits34 As List(Of Integer) = Sp7.Take(6).ToList
No se creo yo  Luis
|
|
« Última modificación: 6 Abril 2016, 19:27 pm por luis456 »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Lekim
Desconectado
Mensajes: 268
|
Repito. No puedes meter cadenas de texto 'string' en integer. De hecho, según ese código (que me suena un poco  ) ya tienes el ejemplo de como meter el ListBox en una variable... Dim ClearList As New List(Of String)(ListBox1.Items.OfType(Of String))
Lo que hace el código, es meter la lista pura del ListBox (que son cadenas string) en la variable ClearList que es un List(of T) que es un array. Luego en el For Each repasa cada Item del ClearList y si cumple las condiciones borra los Items del ListBox que las cumpla. Ahora, si quieres meterlo en una variable, llamada por ejemplo 'NuevaLista', tan solo lo has de meter otra vez como antes: Dim NuevaLista As New List(Of String)(ListBox1.Items.OfType(Of String)) Y ya lo tienes metido. Pero como String, claro. Porque algo como esto --> "01 02 03 04 05 06" es string e incluso Object, pero no integer ListBox1.Items.Add("01 02 03 04 05 06") ListBox1.Items.Add("10 20 30 44 45 46") ListBox1.Items.Add("12 22 34 45 56 65") ListBox1.Items.Add("12 22 34 45 56 65") Dim Pattern As String = " " Dim Digito() As String '//Mete los Items del ListBox en ClearList Dim ClearList As New List(Of String)(ListBox1.Items.OfType(Of String)) For Each Item As String In ClearList Digito = System.Text.RegularExpressions.Regex.Split(Item, Pattern) If CInt(Digito(1)) = CInt(Digito(0)) + 1 And CInt(Digito(2)) = CInt(Digito(1)) + 1 And CInt(Digito(3)) = CInt(Digito(2)) + 1 And CInt(Digito(4)) = CInt(Digito(3)) + 1 And CInt(Digito(5)) = CInt(Digito(4)) + 1 Then ListBox1.Items.Remove(Item) '<-----Borra un Item del ListBox End If Next '//Mete la nueva lista en NewList Dim NuevaLista As New List(Of String)(ListBox1.Items.OfType(Of String)) NuevaLista = NuevaLista.Distinct.ToList '//Quita Items repetidos MessageBox.Show(NuevaLista(0).ToString) MessageBox.Show(NuevaLista(1).ToString)
Pero como te comenté no soy experto en NET, pero por lo que sé, yo lo veo así. s2s
había un condición repetida dos veces, ya lo he quitado : CInt(Digito(5)) = CInt(Digito(4)) + 1 Bueno, no es solo que estuviera repetido.. es que faltaba uno, el : CInt(Digito(4)) = CInt(Digito(3)) + 1 ya que supongo que es para quitar combinaciones con todos los números correlativos
|
|
« Última modificación: 7 Abril 2016, 13:17 pm por Lekim »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
Repito. No puedes meter cadenas de texto 'string' en integer. De hecho, según ese código (que me suena un poco  ) ya tienes el ejemplo de como meter el ListBox en una variable... Dim ClearList As New List(Of String)(ListBox1.Items.OfType(Of String))
Lo que hace el código, es meter la lista pura del ListBox (que son cadenas string) en la variable ClearList que es un List(of T) que es un array. Luego en el For Each repasa cada Item del ClearList y si cumple las condiciones borra los Items del ListBox que las cumpla. Ahora, si quieres meterlo en una variable, llamada por ejemplo 'NuevaLista', tan solo lo has de meter otra vez como antes: Dim NuevaLista As New List(Of String)(ListBox1.Items.OfType(Of String)) Y ya lo tienes metido. Pero como String, claro. Porque algo como esto --> "01 02 03 04 05 06" es string e incluso Object, pero no integer ListBox1.Items.Add("01 02 03 04 05 06") ListBox1.Items.Add("10 20 30 44 45 46") ListBox1.Items.Add("12 22 34 45 56 65") ListBox1.Items.Add("12 22 34 45 56 65") Dim Pattern As String = " " Dim Digito() As String '//Mete los Items del ListBox en ClearList Dim ClearList As New List(Of String)(ListBox1.Items.OfType(Of String)) For Each Item As String In ClearList Digito = System.Text.RegularExpressions.Regex.Split(Item, Pattern) If CInt(Digito(1)) = CInt(Digito(0)) + 1 And CInt(Digito(2)) = CInt(Digito(1)) + 1 And CInt(Digito(3)) = CInt(Digito(2)) + 1 And CInt(Digito(5)) = CInt(Digito(4)) + 1 Then ListBox1.Items.Remove(Item) '<-----Borra un Item del ListBox End If Next '//Mete la nueva lista en NewList Dim NuevaLista As New List(Of String)(ListBox1.Items.OfType(Of String)) NuevaLista = NuevaLista.Distinct.ToList '//Quita Items repetidos MessageBox.Show(NuevaLista(0).ToString) MessageBox.Show(NuevaLista(1).ToString)
Pero como te comenté no soy experto en NET, pero por lo que sé, yo lo veo así. s2s
había un condición repetida dos veces, ya le he quitado : CInt(Digito(5)) = CInt(Digito(4)) + 1 Ya había resuelto lo de meterlo en una variable y me he vuelto loco tratando de pasarlos a integer,pero se que es como tu dices pero no puedo trabajar mis otros códigos ya que son todos integer  no se puede pasar el codigo entero a integer ? ya que te son conocidos  lo he puesto asi pero da error al final La conversión de la cadena "10 20 30 44 45 46" en el tipo 'Integer' no es válida. ListBox1.Items.Add("01 02 03 04 05 06") ListBox1.Items.Add("10 20 30 44 45 46") ListBox1.Items.Add("12 22 34 45 56 65") ListBox1.Items.Add("12 22 34 45 56 65") Dim Pattern As String = " " Dim Digito() As String '//Mete los Items del ListBox en ClearList Dim ClearList As New List(Of String)(ListBox1.Items.OfType(Of String)) For Each Item As String In ClearList Digito = System.Text.RegularExpressions.Regex.Split(Item, Pattern) If CInt(Digito(1)) = CInt(Digito(0)) + 1 And CInt(Digito(2)) = CInt(Digito(1)) + 1 And CInt(Digito(3)) = CInt(Digito(2)) + 1 And CInt(Digito(4)) = CInt(Digito(3)) + 1 And CInt(Digito(5)) = CInt(Digito(4)) + 1 Then ListBox1.Items.Remove(Item) '<-----Borra un Item del ListBox End If Next '//Mete la nueva lista en NewList Dim NuevaLista As New List(Of String)(ListBox1.Items.OfType(Of String)) NuevaLista = NuevaLista.Distinct.ToList '//Quita Items repetidos MessageBox.Show(NuevaLista(0).ToString) MessageBox.Show(NuevaLista(1).ToString) Me.ListBox2.Items.AddRange((From value As Integer In NuevaLista Where value <> 0).Cast(Of Object).ToArray) <<<aca el error
saludos Luis
|
|
« Última modificación: 7 Abril 2016, 13:21 pm por luis456 »
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Lekim
Desconectado
Mensajes: 268
|
no se puede pasar el codigo entero a integer ? ¿Es esta la pregunta? "Entero a integer" es lo mismo XD. No fuera bromas. No se a que te refieres Es como querer pasar Dim txtCadena as String = "La patata boba" a Integer.
|
|
« Última modificación: 7 Abril 2016, 13:22 pm por Lekim »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 548
|
no se puede pasar el codigo entero a integer ? ¿Es esta la pregunta? "Entero a integer" es lo mismo XD. No fuera bromas. No se a que te refieres Jeje se me fue la olla  de string a integer jejje luis
|
|
|
En línea
|
Que tu sabiduria no sea motivo de Humillacion para los demas
|
|
|
Lekim
Desconectado
Mensajes: 268
|
No se, como no sea que quites los espacios a "AA BB CC DD..." y quede "AABBCCDD". Pero entonces no aceptaría Integer porque saldrían números muy grandes como 102030444546 y no se acepta como Integer, si no como Double. ListBox1.Items.Add("01 02 03 04 05 06") ListBox1.Items.Add("10 20 30 44 45 46") ListBox1.Items.Add("12 22 34 45 56 65") ListBox1.Items.Add("12 22 34 45 56 65") Dim Pattern As String = " " Dim Digito() As String '//Mete los Items del ListBox en ClearList Dim ClearList As New List(Of String)(ListBox1.Items.OfType(Of String)) For Each Item As String In ClearList Digito = System.Text.RegularExpressions.Regex.Split(Item, Pattern) If CInt(Digito(1)) = CInt(Digito(0)) + 1 And CInt(Digito(2)) = CInt(Digito(1)) + 1 And CInt(Digito(3)) = CInt(Digito(2)) + 1 And CInt(Digito(4)) = CInt(Digito(3)) + 1 And CInt(Digito(5)) = CInt(Digito(4)) + 1 Then ListBox1.Items.Remove(Item) '<-----Borra un Item del ListBox End If Next ClearList.Clear() '//Borra ClearList ClearList.AddRange(ListBox1.Items.OfType(Of String)) '//Consigue la nueva lista del ListBox Dim NuevaLista As New List(Of Double) For Each Item As String In ClearList NuevaLista.Add(Item.Replace(" ", Nothing)) Next MessageBox.Show(NuevaLista(0).ToString) MessageBox.Show(NuevaLista(1).ToString)
Rectifico mi comentario "no se puede meter cadenas string a integer", por si alguien me regaña... A ver si el string es un número, entonce sí: Dim Cadena as string = "12345" Dim Numero as Integer = Cadena
también con el singo "-" delante indicando negatividad. Dim Cadena As String = "-12345" Dim Numero As Integer = Cadena
Pero si tiene carácteres distintos a un número tal como Espacio, coma, "x", "&" o letras por ejemplo pues entonces creo que no. A no ser que combiertas la cadena de texto a byte o algo así, no se, no he probado.
|
|
« Última modificación: 7 Abril 2016, 14:06 pm por Lekim »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.697
|
Lo que pretendes hacer no es adecuado (ya lo sabes), pero es muy sencillo, ¿será por maneras de hacerlo?... a estas alturas ya deberías saber hacer algo tan simple usando LINQ. Teniendo esta cadena de texto: Dim str As String = "01 02 03 04 05 06"
Puedes utilizar LINQ para no perder la costumbre: Dim int32Col As IEnumerable(Of Integer) = From item As String In str.Split(" "c) Select CInt(item)
O utilizar un búcle for-each: Dim int32List As New List(Of Integer) For Each item As String In str.Split(" "c) int32List.Add(CInt(item)) Next
...Lo que viene siendo practicamente lo mismo que esto otro: Dim int32List As New List(Of Integer) Array.ForEach(Of String)(str.Split(" "c), Sub(ByVal item As String) int32List.Add(CInt(item)) End Sub)
O puedes hacerlo de lo que considero la manera más óptima: Dim int32Col As IEnumerable(Of Integer) = Array.ConvertAll(Of String, Integer)(str.Split(" "c), Function(ByVal item As String) Return Integer.Parse(item) End Function)
Para adaptarlo a los elementos de un Listbox, solo debes seguir el mismo procedimiento pero enfocado hacia una colección... Primero creamos una referencia corta de la colección de items: Dim lbItems As IEnumerable(Of String) = ListBox1.Items.Cast(Of String)
Y entonces puedes llevar a cabo esto: Dim int32Col As IEnumerable(Of IEnumerable(Of Integer)) = From strItem As String In lbItems Select (From value As String In strItem.Split(" "c) Select CInt(value))
...o bien esto otro: Dim lbItems As String() = ListBox1.Items.Cast(Of String).ToArray Dim int32Cols As New List(Of IEnumerable(Of Integer)) Array.ForEach(lbItems, Sub(item As String) int32Cols.Add(Array.ConvertAll(Of String, Integer)(item.Split(" "c), Function(ByVal value As String) Return Cint(value) End Function)) End Sub)
Saludos
|
|
« Última modificación: 7 Abril 2016, 14:18 pm por Eleкtro »
|
En línea
|
|
|
|
Lekim
Desconectado
Mensajes: 268
|
Pero no sería pasarlo a integer, sino crear una colección o matriz interpretando cada elemento de una cadena de texto distinto de " " como integer. De ahí el uso que le das de Split
Al parecer tiene dos códigos, uno que le pasé yo y otro el tuyo Elektro. El cual estará como lo acabas de poner. Y quiere usar los dos en el mismo proyecto
|
|
« Última modificación: 7 Abril 2016, 14:14 pm por Lekim »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Pregunta boba de Vb
Programación Visual Basic
|
GrTk
|
6
|
1,798
|
22 Julio 2006, 13:28 pm
por Hans el Topo
|
|
|
como recorrer Listbox y pasar valores a un arreglo?
Programación Visual Basic
|
GhostLT
|
4
|
17,576
|
26 Mayo 2016, 16:27 pm
por SirioCasius
|
|
|
Pasar listbox a textbox al hacer click en un valor del listbox
.NET (C#, VB.NET, ASP)
|
BrokerJoker
|
3
|
22,850
|
13 Mayo 2012, 17:13 pm
por BrokerJoker
|
|
|
pregunta boba, siglas de archivos
Dudas Generales
|
basickdagger
|
3
|
2,163
|
5 Junio 2014, 17:00 pm
por basickdagger
|
|
|
Seguimos con registros en listbox :)
.NET (C#, VB.NET, ASP)
|
luis456
|
8
|
3,458
|
29 Marzo 2016, 14:23 pm
por Lekim
|
|