Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: luis456 en 6 Octubre 2013, 15:20 pm



Título: Ordenar de menor a mayor una serie de números en Texbox y evitar repetidos
Publicado por: luis456 en 6 Octubre 2013, 15:20 pm
Como podría ordenar de menor a mayor en este bloque de texbox ,ya que mando directo los datos ? se podría hacer con variables sin tener que usar matrices ?
y que no se repitan los números en los texbox y que si hay un repetido me lo supla con otro numero dentro de un rango de números ya establecido.

Pd: los números son aleatorios y no gobierno los resultados enviados a los texbox

Código:
TextBox27.Text = r5
        TextBox28.Text = r5
        TextBox29.Text = r5
        TextBox30.Text = r5



Luis


Título: Re: Ordenar de menor a mayor una serie de números en Texbox y evitar repetidos
Publicado por: Eleкtro en 6 Octubre 2013, 17:25 pm
En lugar de asignar diréctamente interactuando con las propiedades del Textbox, almacena los números en un tipo de colección, un array, o una lista, o una lista ordenada (SortedList), o lo que prefieras, y ordenas los elementos del objeto.

Código
  1. Private NumbersArray() As Int32
  2. Array.Sort(NumbersArray)

Código
  1. Private NumbersList As New List(Of Int32)
  2. NumbersList.Sort()

Código
  1. Private list As New SortedList

PD: La variable r5 no dices de que tipo es, aunque me imagino que es un entero, no somos magos, si especificas con más detalles lo que necesitas recibirás mejor ayuda, tienes alrededor de 30 textboxes y no se si los quieres ordenar para que aparezca cada número (un solo número) en cada textbox o que es lo que quieres hacer, muestra parte del código, detalles, información, imágenes.

EDITO: Eliminar duplicados de una colección también es facil (más usando Linq):

Código
  1. #Region " Remove Array Duplicates "
  2.  
  3.    ' Remove Array Duplicates
  4.    '
  5.    ' // By Elektro H@cker
  6.    '
  7.    ' Examples :
  8.    '
  9.    ' Dim myarray(3) As String : myarray(0) = "a" : myarray(1) = "a" : myarray(2) = "b" : myarray(3) = "b"
  10.    ' For Each item In Remove_Array_Duplicates(myarray) : MsgBox(item) : Next
  11.  
  12.    Private Function Remove_Array_Duplicates(ByVal Myarray() As String) As String()
  13.        Return Myarray.Cast(Of String).Distinct().ToArray
  14.    End Function
  15.  
  16. #End Region

Código
  1. #Region " Remove List Duplicates "
  2.  
  3.    ' Remove List Duplicates
  4.    '
  5.    ' // By Elektro H@cker
  6.    '
  7.    ' Examples :
  8.    '
  9.    ' Dim list As New List(Of String) From {"a", "a", "b", "b", "c", "c"}
  10.    ' For Each item In Remove_List_Duplicates(list) : MsgBox(item) : Next
  11.  
  12.    Private Function Remove_List_Duplicates(ByVal list As List(Of String)) As List(Of String)
  13.        Return list.Cast(Of String).Distinct().ToList
  14.    End Function
  15.  
  16. #End Region

Saludos!


Título: Re: Ordenar de menor a mayor una serie de números en Texbox y evitar repetidos
Publicado por: luis456 en 8 Octubre 2013, 05:35 am
Bien os pongo el codigo o la birria :)

tengo dos texbox numericos (r1 y r2)  donde introdusco dos digitos y hago una suma y los reflejo en los texbox 3, 4, 5 y 6 segun los numeros que le introduscas ( Rango desde el 01 al 99 ) estos deberian ir de menor a mayor. y evitar los repetidos ya que al conseguir repetidos reenplazar por cualquier numero comprendido en el rango ( disculpen pero aprendi a programar cuando habia que escribir mucho codigo jjje)

Bien seria mas o menos la mecanica:

en texbox1 pongo el numero 20 y en el texbox2 pongo el 40 y esto me daria este resultado:


texbox1 introdusco el 20

20+15= 35 esto se muestra en el texbox3
20+25= 45 esto se muestra en el texbox4

texbox2 introdusco el 40

40+30= 70 esto se muestra en el texbox5
40+20= 60 esto se muestra en el texbox4 <--aca es que se deberia ver el 70

los texbox se muestran de esta manera

texbox3 y texbox4
texbox5 y texbox6


Código:
  Public Class Form1
    Dim Sep As Char
    Dim Número As Double
    Dim r1, r2 As Integer

    Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)

        If Char.IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If

    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        r1 = Val(TextBox1.Text)
        TextBox3.Text = r1 + 15
        TextBox4.Text = r1 + 25
       
       
        r2 = Val(TextBox2.Text)
        TextBox5.Text = r2 + 30
        TextBox6.Text = r2 + 20
 End Sub


End Class


Pregunta : habra alguna forma mas facil de hacerlo jejejje ? o mostrar el resultado en un lisbox ya acomodado

Luis




Título: Re: Ordenar de menor a mayor una serie de números en Texbox y evitar repetidos
Publicado por: Eleкtro en 9 Octubre 2013, 18:12 pm
(http://img46.imageshack.us/img46/2691/gm5q.png)

Código
  1. Public Class Form1
  2.  
  3.    Private TextBoxes As TextBox() = {Nothing}
  4.  
  5.    Private Result1 As Int32(), Result2 As Int32()
  6.  
  7.    ReadOnly Property Num1 As Int32
  8.        Get
  9.            Return CInt(TextBox1.Text)
  10.        End Get
  11.    End Property
  12.  
  13.    ReadOnly Property Num2 As Int32
  14.        Get
  15.            Return CInt(TextBox2.Text)
  16.        End Get
  17.    End Property
  18.  
  19.    Private Sub Sumar(sender As Object, e As EventArgs) _
  20.    Handles Button_Sum.Click
  21.  
  22.        Dim TextBoxCount As Short = -1
  23.  
  24.        TextBoxes = {TextBox3, TextBox4, TextBox5, TextBox6}
  25.  
  26.        Result1 = {Num1 + 15, Num1 + 25} _
  27.                  .Distinct().ToArray ' Elimino duplicados
  28.  
  29.        Result2 = {Num2 + 30, Num2 + 20} _
  30.                  .Distinct().ToArray ' Elimino duplicados
  31.  
  32.        Array.Sort(Result1) : Array.Sort(Result2) ' Ordeno los Items
  33.  
  34.        For Each Number As Int32 In Result1
  35.            TextBoxCount += 1
  36.            TextBoxes(TextBoxCount).Text = Number
  37.        Next
  38.  
  39.        For Each Number As Int32 In Result2
  40.            TextBoxCount += 1
  41.            TextBoxes(TextBoxCount).Text = Number
  42.        Next
  43.  
  44.    End Sub
  45.  
  46. End Class

Adáptalo a tus necesidades.

PD: Porfavor te lo he comentado mil veces, deberías dejar de utilizar métodos de VB6 (Val), no estás en el obsoleto VB6, estás en VB.NET, pero bueno, que cada uno programe como desee!

Saludos!