Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Usuario 101 en 08 de Junio 2016, 20:48

Título: Ordenar valores numéricos (números) de menor a mayor en un ListBox Visual Basic
Publicado por: Usuario 101 en 08 de Junio 2016, 20:48
Hola, estoy trabajando en un pequeño proyecto en Visual studio, en Form y me he encontrado con un problema.

Mi problema es como ordenar los valores agregados a una ListBox por medio de un botón. Me dieron un código que es de las propiedades de la ListBox, estoy hablando del "Sorted". Bueno este es el código que tengo.

Código: [Seleccionar]
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Esto es para agregar los valores a la ListBox
        ListBox1.Items.Add(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' Esto segun es para que se ordenara
        ListBox1.Sorted = True
    End Sub
End Class

Y cuando lo ejecuto ocurre esto:

(https://k61.kn3.net/2/B/7/5/0/3/0AA.png)

Si saben como arreglar o que otro código implementar para que se pueda ordenar de menor a mayor se los agradeceré.
Título: Re:Ordenar valores numéricos (números) de menor a mayor en un ListBox Visual Basic
Publicado por: César Krall en 21 de Junio 2016, 21:20
Hola!

La propiedad sorted en los listbox sirve para ordenar alfabéticamente Strings, es decir, cadenas de texto.

Al ordenar como si fuera un texto lo que hace es buscar el carácter más bajo, y según ese ordena. Por ejemplo 13 lo pondría antes que 5 porque lo que mira primero es el primer carácter (primera letra) y como 1 es más pequeño que 5 pues coloca 13 antes que 5, sólo porque los trata como si fueran texto.

Si lo que quieres es ordenar números puedes basarte en este código:

Código: [Seleccionar]
Private Shared Sub SortIntegerListBox(ByVal listBox As ListBox)
    Dim TempList As New List(Of Integer)
    For Each LI In listBox.Items
        TempList.Add(Integer.Parse(LI.ToString()))
    Next
    TempList.Sort()
    listBox.DataSource = TempList
End Sub

Un ejemplo de cómo se podría usar el código:

Código: [Seleccionar]
    Dim Items As New List(Of Integer)
    Items.Add(1)
    Items.Add(13)
    Items.Add(2)

    Me.ListBox1.DataSource = Items
    SortIntegerListBox(Me.ListBox1)

Saludos!