Hola a todos
lo tenia pero no encuentro la rutina como se eliminan los numeros con signos negativos en un listbox .
ejemplo :
-1
-3
uso este codigo que funciona bien para mostrar los resultados pero a veces salen numeros con negativo
Dim Result As IEnumerable(Of Integer) =
(Result1.Concat(Result2).Concat(Result3).Concat(Result4).Concat(Result5)).
Distinct.
Select(Function(Value As Integer)
Return If(Value < MAX, Value, Rand.Next(0, MAX))
End Function)
ListBox7.Items.AddRange(Result.Cast(Of Object).ToArray)
saludos
Luis
¿y si multiplicas el valor por -1? pregunto -1 * -1=1
si el valor es < 0 ... valor = valor * -1
Cita de: FJDA en 15 Febrero 2020, 22:01 PM
¿y si multiplicas el valor por -1? pregunto -1 * -1=1
si el valor es < 0 ... valor = valor * -1
es que ya uso una función en el programa y solo necesito filtrar ese resultado cuando lo envió al listbox
los duplicados ya los elimino con este codigo pero siguen saliendo numeros con el - adelante ?
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
' Le pasa el Listbox a la función
MsgBox(Eliminar(ListBox23), _
MsgBoxStyle.Information, _
"Elementos duplicados en el List ")
End Sub
Function Eliminar(ByVal LB As ListBox) As Int32
Dim i As Int32
Dim j As Int32
Dim n As Int32
' Recorre los items ( copara empezando _
'desde el primero , de abajo hacia arriba)
For i = 0 To LB.Items.Count - 2
For j = LB.Items.Count - 1 To i + 1 Step -1
' verifica si es el mismo
If LB.Items(i).ToString = LB.Items(j).ToString Then
' elimina el elemento indicando el índice
LB.Items.RemoveAt(j)
n += 1 'lleva la cuenta de los duplicados
End If
Next
Next
Return n ' retorna los eliminados
End Function *
saludos
Luis
podrías meterlo en array List y luego usar Disctinct.ToList para eliminar elementos repetidos, luego lo metes en un listbox y listo.
Dim Lista As New List(Of Integer)
Lista.AddRange({1, 5, 5, 5, 4, 1, 12, 4, 55, 55, 55, 55})
Lista = Lista.Distinct.ToList
ListBox1.DataSource = Lista
'For Each Elemento As String In Lista
'ListBox1.Items.Add(Elemento)
'Next
Cita de: FJDA en 16 Febrero 2020, 16:44 PM
podrías meterlo en array List y luego usar Disctinct.ToList para eliminar elementos repetidos, luego lo metes en un listbox y listo.
Dim Lista As New List(Of String)
Lista.AddRange({1, 5, 5, 5, 4, 1, 12, 4, 55, 55, 55, 55})
Lista = Lista.Distinct.ToList
For Each Elemento As String In Lista
ListBox1.Items.Add(Elemento)
Next
Te agradezco tu aporte pero lo que busco es eliminar los que tengan signos negativo adelante ,se que tenia todas esas Rutinas gracias a Electro, pero he perdido todos esos códigos y estoy en cero >:(
he recuperado parte de todo el codigo pero no encuentro este,
saludos
Luis
Cita de: luis456 en 16 Febrero 2020, 20:06 PM
Te agradezco tu aporte pero lo que busco es eliminar los que tengan signos negativo adelante ,se que tenia todas esas Rutinas gracias a Electro, pero he perdido todos esos códigos y estoy en cero >:(
he recuperado parte de todo el codigo pero no encuentro este,
saludos
Luis
no se, soy yo o te explicas mal
"lo que busco es eliminar los que tengan signos negativo adelante" , esto es muy ambiguo por lo menos en un principio
Esto está respondido arriba multiplicando los elementos por -1, no lo hice porque era mas que evidente pero parece que quiere que te den el código hecho;
For I As Integer = 0 To ListBox1.Items.Count - 1
If ListBox1.Items(I) < 0 Then
ListBox1.Items(I) = ListBox1.Items(I) * -1
End If
Next
Como se repiten hay que quitar los repetidos, usando el array LIST como te expliqué y he publicado el código eliminas los repetidos.
Public Class Form1
Dim lista() As Integer = {-1, -2, -3, -4, -5, 0, 1, 2, 3, 4, 5, 6}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'ListBox1.DataSource = lista
For Each elemento In lista
ListBox1.Items.Add(elemento)
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'//QUITAR SIGNOS NEGATIVOS
For I As Integer = 0 To ListBox1.Items.Count - 1
If ListBox1.Items(I) < 0 Then
ListBox1.Items(I) = ListBox1.Items(I) * -1 'nota: no funciona si se usa ListBox1.DataSource()
End If
Next
'//QUITAR ELEMENTOS REPETIDOS
Dim nuevaLista As New List(Of Integer)
For Each elemento In ListBox1.Items
nuevaLista.Add(elemento)
Next
nuevaLista = nuevaLista.Distinct.ToList() 'elimina repetidos
nuevaLista.Sort() 'Ordena la lista
ListBox1.Items.Clear() 'limpia el listbox (no funciona con DataSource)
'ListBox1.DataSource= Nothing 'usar solo si es se usó datasource para llenar el listbox
For Each Elemento As String In nuevaLista
ListBox1.Items.Add(Elemento)
Next
End Sub
End Class
Si lo que quieres, porque ya no se que pensar es quitar los número negativos entonces usa linq para obtener solo aquellos números que sean mayores que cero, aunque hay formas más típicas de hacerlo como pasar todo a un array, y volver a meter en e listbox ya sin los negativos usando if then y for next
Public Class Form1
Dim lista() As Integer = {-1, -2, -3, -4, -5, 0, 1, 2, 3, 4, 5, 6}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ListBox1.DataSource = lista
'For I As Integer = 0 To lista.Length -1
' ListBox1.Items.Add(lista(I))
'Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'//elimina los número negativos
Dim NumPositivo As IEnumerable(Of String) = Nothing
NumPositivo = From value1 In lista Where (value1 >= 0) Select String.Format("{0}", value1)
ListBox1.DataSource = Nothing
'Si no se usara DataSourse usar lo siguinte:
'ListBox1.Items.Clear()
For Each pairs As String In NumPositivo
ListBox1.Items.Add(pairs)
My.Application.DoEvents()
Next pairs
End Sub
End Class
Añado que preguntaste:
CitarComo evitar se muestren números con el signo negativo en un ListBox ?
y como "como evitar" es multiplicar por -1 ANTES de meterlo en el listbox y si no los quieres meter números negativos usa la condición si es menor que cero no lo mentas en el listbox.
Claro que si quieres una respuesta exclusivamente de @Elektro perfectamente elaborada, entonces ya eso es otra cosa. A ver si aparece por aquí y si no pues le envías un mensaje personal y a ver si te contesta.
saludos
Gracias FJDA
No no quiero todo hecho, solo que de verdad suelo hacer las preguntas mal enfocadas ,y ademas ya tengo casi 60 años y me cuesta un poco más esto, ya que yo programo por vicio o hobby y si nombro a ELECTRO no es por nada especial,solo que el tuvo mucha paciencia conmigo :silbar:
y se que mis codigos son algo básicos,pero pregunto porque estoy seguro que alguien mas le servirán,supieras la de codigos que he cojido del foro y me han ayudado.
De verdad que muchas gracias por tu ayuda para este viejo ;-)
Luis