Como evitar se muestren números con el signo negativo en un ListBox ?

Iniciado por luis456, 15 Febrero 2020, 21:39 PM

0 Miembros y 1 Visitante están viendo este tema.

luis456

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


Código (vbnet) [Seleccionar]
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




Que tu sabiduria no sea motivo de Humillacion para los demas

FJDA

¿y si multiplicas el valor por -1? pregunto -1 * -1=1

si el valor es < 0 ... valor = valor  * -1

luis456

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 ?

Código (vbnet) [Seleccionar]
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
Que tu sabiduria no sea motivo de Humillacion para los demas

FJDA

podrías meterlo en array List y luego usar Disctinct.ToList para eliminar elementos repetidos, luego lo metes en un listbox y listo.


Código (vbnet) [Seleccionar]

     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



luis456

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.


Código (vbnet) [Seleccionar]

     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




Que tu sabiduria no sea motivo de Humillacion para los demas

FJDA

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;

Código (vbnet) [Seleccionar]
    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.

Código (vbnet) [Seleccionar]

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

Código (vbnet) [Seleccionar]

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

luis456

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
Que tu sabiduria no sea motivo de Humillacion para los demas