Vuelvo al ataque con los texboxes :) evitar repe

Iniciado por luis456, 3 Diciembre 2013, 16:53 PM

0 Miembros y 2 Visitantes están viendo este tema.

luis456

Bien gracias a Elketro jejej que me da una buena mano a pesar que estoy injertado con visual y net. bueno a lo mejor y nace un lenguaje de programacion nuevo jejeje.

Bien como veran en el codigo en que los resultados van entrando en los texboxes segun se hagan los calculos y estan numerados consecutivamente y estos texbosex los muestro en el formu en lineas de 4 en cuatro.


Texboses mostrados de esta forma
1   2  3  4
5   6  7  8
9 10 11 12

Bien mi problema es que no quiero que se repitan números en las lineas ??? y como estos se van llenando segun el calculo o suma he probado a intercalar los texboxes pero menuda chapuza jejeje.

Bueno el codigo

Código (vbnet) [Seleccionar]
Public Class Form1
   Dim MIN As Integer = 0
   Dim MAX As Integer = 99

   Private Sub FrmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Me.ControlBox = False ' Elimino todos los controles del formulario
   End Sub



   Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32()
   Dim Sep As Object
   Dim texbox7 As Object
   Dim o As Object
   Private _val As Object
   Private _val1 As Integer
   Dim TextBox As TextBox()

   ReadOnly Property Num1 As Int32
       Get
           Return CInt(TextBox1.Text)
       End Get
   End Property

   ReadOnly Property Num2 As Int32
       Get
           Return CInt(TextBox2.Text)
       End Get
   End Property
   ReadOnly Property Num3 As Int32
       Get
           Return CInt(TextBox3.Text)
       End Get
   End Property


Private Property KeyAscii As Integer

   Private Property Val(ByVal form1 As Form1, ByVal p2 As Object) As Object
       Get
           Return _val
       End Get
       Set(ByVal value As Object)
           _val = value
       End Set
   End Property

   Private Property Val(ByVal p1 As Object) As Integer
       Get
           Return _val1
       End Get
       Set(ByVal value As Integer)
           _val1 = value
       End Set
   End Property

   Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) _
   Handles Calcular.Click

       Dim TextBoxCount As Short = -1

       TextBox = {TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20, TextBox21, TextBox22, TextBox23, TextBox24, TextBox25, TextBox26, TextBox27, TextBox28, TextBox29, TextBox30, TextBox31, TextBox32, TextBox33, TextBox34, TextBox35, TextBox36, TextBox37, TextBox38, TextBox39, TextBox40, TextBox41, TextBox42, TextBox43, TextBox44, TextBox45, TextBox46, TextBox47, TextBox48, TextBox49, TextBox50, TextBox51, TextBox52, TextBox53, TextBox54, TextBox55, TextBox56, TextBox57, TextBox58, TextBox59, TextBox60}

       Result1 = {Num1 + 1, Num1 + 20, Num1 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result2 = {Num2 + 10, Num2 + 20, Num2 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result3 = {Num3 + 10, Num3 + 20, Num3 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3)  ' Ordeno los Items

       ' funcion
       For Each Number As Int32 In Result1
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

       For Each Number As Int32 In Result2
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

       For Each Number As Int32 In Result3
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next


End Class



Luis




Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#1
Admirable insistencia,
no se cuantas veces se habrá hablado sobre el tema de los textboxes, se te dieron varias soluciones distintas por parte de varios usuarios (si no recuerdo mal).
Veo que estás usando un código que te mostré, con pequeñas variaciones.

Podrías hacer algo así, desde la linea del Array.Sort, esto reemplazaría a los 3 búcles que usas.
Código (vbnet) [Seleccionar]
       Array.Sort...' Ordeno los Arrays

       ' Concateno todos los Arrays (esto es algo opcional, simplemente para hacerlo de una en este ejemplo)
       Dim Results As IEnumerable(Of Integer) =
           Result1.Concat(Result2).Concat(Result3)

       For X As Integer = 0 To Results.Count - 1

           TextBoxCount += 1

           Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

               Case False ' El número no está repetido en ninguna "linea"
                   ' Así que colocamos el número en el Textbox
                   TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

               Case True ' El número está repetido en alguna de las "lineas"
                   ' Así que haces lo que quieras con el Número/Textbox
                   MsgBox(Results(X))
                   TextBox(TextBoxCount).Text = -1.ToString

           End Select

       Next X


PD: Fíjate bien, el código comprueba si hay duplicados en el array "unido", es decir, en lo que serian todas las lineas de textboxes a la vez, no linea por linea, no se como lo quieres asi que eso he preferido dejarlo a tu elección... de todas formas para eso solo tendrías que hacer el mismo procedimiento 3 veces, quiero decir con cada array por separado, no con un array unido, vamos, lo mismo que haces en el código que has mostrado con los 3 búcles, tampoco lo voy a dar todo regalado xD, tu puedes hacer esa modificación.

Saludos!








luis456

#2
Bueno despues de estar enredado con esto y que la pc me escupa ejjeje no se ya donde buscar pues el programa en el editor antes de ejecutarlo no me da error pero al ejecutarlo todo parece bien pero cuando hago la funcion BINGO

Message=No se puede implementar el método o la operación.


Lo puse de esta forma


Código (vbnet) [Seleccionar]
Public Class Form1
   Dim MIN As Integer = 0
   Dim MAX As Integer = 99
   Dim x As Integer <---------NO SE SI ES A SI


   Private Sub FrmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Me.ControlBox = False ' Elimino todos los controles del formulario
   End Sub



   Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32()
   Dim Sep As Object
   Dim texbox7 As Object
   Dim o As Object
   Private _val As Object
   Private _val1 As Integer
   Dim TextBox As TextBox()

   ReadOnly Property Num1 As Int32
       Get
           Return CInt(TextBox1.Text)
       End Get
   End Property

   ReadOnly Property Num2 As Int32
       Get
           Return CInt(TextBox2.Text)
       End Get
   End Property
   ReadOnly Property Num3 As Int32
       Get
           Return CInt(TextBox3.Text)
       End Get
   End Property


Private Property KeyAscii As Integer

   Private Property Val(ByVal form1 As Form1, ByVal p2 As Object) As Object
       Get
           Return _val
       End Get
       Set(ByVal value As Object)
           _val = value
       End Set
   End Property

   Private Property Val(ByVal p1 As Object) As Integer
       Get
           Return _val1
       End Get
       Set(ByVal value As Integer)
           _val1 = value
       End Set
   End Property

   Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) _
   Handles Calcular.Click

       Dim TextBoxCount As Short = -1

       TextBox = {TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20, TextBox21, TextBox22, TextBox23, TextBox24, TextBox25, TextBox26, TextBox27, TextBox28, TextBox29, TextBox30, TextBox31, TextBox32, TextBox33, TextBox34, TextBox35, TextBox36, TextBox37, TextBox38, TextBox39, TextBox40, TextBox41, TextBox42, TextBox43, TextBox44, TextBox45, TextBox46, TextBox47, TextBox48, TextBox49, TextBox50, TextBox51, TextBox52, TextBox53, TextBox54, TextBox55, TextBox56, TextBox57, TextBox58, TextBox59, TextBox60}

       Result1 = {Num1 + 1, Num1 + 20, Num1 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result2 = {Num2 + 10, Num2 + 20, Num2 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result3 = {Num3 + 10, Num3 + 20, Num3 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3)  ' Ordeno los Items

--------------------------ACA LO PUSE
' Concateno todos los Arrays (esto es algo opcional, simplemente para hacerlo de una en este ejemplo)
       Dim Results As IEnumerable(Of Integer) =
           Result1.Concat(Result2).Concat(Result3)

       For X As Integer = 0 To Results.Count - 1

           TextBoxCount += 1

           Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

               Case False ' El número no está repetido en ninguna "linea"
                   ' Así que colocamos el número en el Textbox
                   TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

               Case True ' El número está repetido en alguna de las "lineas"
                   ' Así que haces lo que quieras con el Número/Textbox
                   MsgBox(Results(X))
                   TextBox(TextBoxCount).Text = -1.ToString

           End Select

       Next X


----------------------------------------------------------------------
       ' funcion
       For Each Number As Int32 In Result1
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

       For Each Number As Int32 In Result2
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

       For Each Number As Int32 In Result3
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

  Private Function TextBox(ByVal TextBoxCount As Short) As Object
       Throw New NotImplementedException <--ERROR-Message=No se puede implementar el método o la operación.
   End Function

End Class



Lo siento Elektro jejeje estoy tapao

Luis

Que tu sabiduria no sea motivo de Humillacion para los demas

.:Weeds:.

Código (vbnet) [Seleccionar]
Public Class Form1
    Dim MIN As Integer = 0
    Dim MAX As Integer = 99

    Dim x As Integer <--------- Cambialo por Dim x as integer = 0


   Private Function TextBox(ByVal TextBoxCount As Short) As Object
        Throw New NotImplementedException <--ERROR-Message=No se puede implementar el método o la operación.
    End Function
   'A ver la parte de la funcion esta todo mal, todo xD
   'Una funcion devuelve un valor, osea tiene un return
   'Esta funcion no tiene un return y para colmo dentro pones un throw que va en el catch de un try, el compilador se debe de haber asustado y todo por intentar tal cosa.
   'Borra la funcion por que no sirve de nada eso.

End Class




luis456

Gracias Weeds

Hice lo que me pusiste y sigue todo igual como dije antes solo que ahora el error me lo da

TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

"""""" Variable de objeto o de bloque With no establecida.  ????????'


luis
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#5
Cito mis palabras:

Cita de: EleKtro H@cker en  3 Diciembre 2013, 17:58 PMPodrías hacer algo así, desde la linea del Array.Sort, esto reemplazaría a los 3 búcles que usas.

Cito tú último código:

Cita de: luis456 en  4 Diciembre 2013, 18:37 PM

Código (vbnet) [Seleccionar]
Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3)  ' Ordeno los Items

--------------------------ACA LO PUSE
' Concateno todos los Arrays (esto es algo opcional, simplemente para hacerlo de una en este ejemplo)
       Dim Results As IEnumerable(Of Integer) =
           Result1.Concat(Result2).Concat(Result3)

       For X As Integer = 0 To Results.Count - 1

           TextBoxCount += 1

           Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

               Case False ' El número no está repetido en ninguna "linea"
                   ' Así que colocamos el número en el Textbox
                   TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

               Case True ' El número está repetido en alguna de las "lineas"
                   ' Así que haces lo que quieras con el Número/Textbox
                   MsgBox(Results(X))
                   TextBox(TextBoxCount).Text = -1.ToString

           End Select

       Next X


----------------------------------------------------------------------
       ' funcion
       For Each Number As Int32 In Result1
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

       For Each Number As Int32 In Result2
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next

       For Each Number As Int32 In Result3
           TextBoxCount += 1
           TextBox(TextBoxCount).Text = Number
       Next


¿Que falla ahí?, que sigues utilizando esos 3 For each, elimínalos.




EDITO:

Sobre la misteriosa incoherente función, no tengo nada que añadir, solo quiero hacer referencia a estas líneas de comentario con la intención de aclarar (a los que no lo sepan) que una función no necesita usar explícitamente la declaración Return para devolver un valor, aunque, porsupuesto esto no está bien visto, solo lo comento:

Cita de: .:Weeds:. en  4 Diciembre 2013, 18:51 PM
Código (vbnet) [Seleccionar]
  'Una funcion devuelve un valor, osea tiene un return
  'Esta funcion no tiene un return

Ejemplo:
Código (vbnet) [Seleccionar]
MsgBox(Test("Hello World")) ' Result: dlroW olleH

Private Function Test(ByVal str As String) As String
     Test = String.Join(String.Empty, str.Reverse)
End Function





Cita de: luis456 en  4 Diciembre 2013, 19:05 PM
TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

"""""" Variable de objeto o de bloque With no establecida.  ????????'

postea la Class entera para examinarla, porque en el anterior código el bloque del método "Sumar" lo dejas abierto, y además adentro del bloque añades una función (¿?), no creo que el código original sea tal y como lo mostraste xD.

Saludos








luis456

#6
Tiemblo cada ves que veo que Elektro me responde jejejej,bueno aca va


Código (vbnet) [Seleccionar]
Public Class Form1

   Dim maximum As Short = 99
   Dim x As Integer = 0
   Dim Número As Double
   Private TextBoxes As TextBox() = {Nothing}
   Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32(), Result4 As Int32()
   Private _textBox As Object

   Private Property Calcular As Object

   Private Property TextBox(ByVal TextBoxCount As Short) As Object
       Get
           Return _textBox
       End Get
       Set(ByVal value As Object)
           _textBox = value
       End Set
   End Property
   ' trial-----------------------------

   Private Shadows Sub Load() Handles MyBase.Load
       My.Settings.contador += 1
       checar()
   End Sub

   Sub checar()

       If My.Settings.contador >= 2500 Then
           MsgBox("Por motivos de seguridad este programa no se activara hasta que me la gana jejeje")
           'Application.Exit()
       End If

   End Sub
   '---------------------
   Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)
       ' evitar letras
       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 FrmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Me.ControlBox = False ' Elimino todos los controles del formulario
   End Sub
   ReadOnly Property Num1 As Int32
       Get
           Return CInt(TextBox1.Text)
       End Get
   End Property

   ReadOnly Property Num2 As Int32
       Get
           Return CInt(TextBox2.Text)
       End Get
   End Property
   ReadOnly Property Num3 As Int32
       Get
           Return CInt(TextBox3.Text)
       End Get
   End Property
   ReadOnly Property Num4 As Int32
       Get
           Return CInt(TextBox4.Text)
       End Get
   End Property
   
   Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) _
   Handles Button1.Click


       Dim TextBoxCount As Short = -1

       TextBoxes = {TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20, TextBox21, TextBox22, TextBox23, TextBox24, TextBox25, TextBox26, TextBox27, TextBox28, TextBox29, TextBox29, TextBox30, TextBox31, TextBox32, TextBox33, TextBox34, TextBox35, TextBox36, TextBox37, TextBox38, TextBox39, TextBox40, TextBox41, TextBox42}

       Result1 = {Num1 + 10, Num1 + 20, Num1 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result2 = {Num2 + 10, Num2 + 20, Num2 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result3 = {Num3 + 10, Num3 + 20, Num3 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result4 = {Num4 + 10, Num4 + 20, Num4 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       

       Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3) : Array.Sort(Result4) : Array.Sort(Result5) : Array.Sort(Result6)  ' Ordeno los Items
       ' ----------------------------------------------------------------------------
       ' aca que no salgan repetidos en las lineas -------------------------------------
       ' Concateno todos los Arrays (esto es algo opcional, simplemente para hacerlo de una en este ejemplo)
       Dim Results As IEnumerable(Of Integer) =
           Result1.Concat(Result2).Concat(Result3).Concat(Result4)

       For X As Integer = 0 To Results.Count - 1



           TextBoxCount += 1

           Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

               Case False ' El número no está repetido en ninguna "linea"
                   ' Así que colocamos el número en el Textbox
                   TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

               Case True ' El número está repetido en alguna de las "lineas"
                   ' Así que haces lo que quieras con el Número/Textbox
                   MsgBox(Results(X))
                   TextBox(TextBoxCount).Text = -1.ToString

           End Select
       Next X
       ' -----------------------------------------------------------------------

       ' aca vamos con el rango

       For Each Number As Int32 In Result1
           TextBoxCount += 1
           TextBoxes(TextBoxCount).Text = Number
       Next
       ' -----------------------------------------
       For Each Number As Int32 In Result2
           TextBoxCount += 1
           TextBoxes(TextBoxCount).Text = Number
       Next
       ' -----------------------------------------
       For Each Number As Int32 In Result3

           TextBoxCount += 1

           If Not Number > maximum Then
               TextBoxes(TextBoxCount).Text = CStr(Number)
           Else
               TextBoxes(TextBoxCount).Text = CStr(maximum)
           End If

       Next Number
       ' -----------------------------------------
       For Each Number As Int32 In Result4

           TextBoxCount += 1

           If Not Number > maximum Then
               TextBoxes(TextBoxCount).Text = CStr(Number)
           Else
               TextBoxes(TextBoxCount).Text = CStr(maximum)
           End If

       Next Number
       ' -----------------------------------------
       
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

   End Sub


   ' limpiar texboxes
   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       For Each obj As Control In Me.Controls
           If (TypeOf obj Is TextBox) Then
               obj.Text = ""
           End If
           If (TypeOf obj Is GroupBox) Then
               For Each caja As Control In obj.Controls
                   If (TypeOf caja Is TextBox) Then
                       caja.Text = ""
                   End If
               Next
           End If
       Next
   End Sub

   Private Sub TextBox7_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
       ' solo numeros sin letras ni signos raros
       sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
   End Sub

   Private Sub TextBox8_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
       sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
   End Sub

   Private Sub TextBox9_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
       sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
   End Sub

   Private Sub TextBox25_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox9.TextChanged, TextBox8.TextChanged, TextBox7.TextChanged, TextBox30.TextChanged, TextBox29.TextChanged, TextBox28.TextChanged, TextBox27.TextChanged, TextBox26.TextChanged, TextBox25.TextChanged, TextBox24.TextChanged, TextBox23.TextChanged, TextBox22.TextChanged, TextBox21.TextChanged, TextBox20.TextChanged, TextBox19.TextChanged, TextBox18.TextChanged, TextBox17.TextChanged, TextBox16.TextChanged, TextBox15.TextChanged, TextBox14.TextChanged, TextBox13.TextChanged, TextBox12.TextChanged, TextBox11.TextChanged, TextBox10.TextChanged
       sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
   End Sub

   Private Sub TextBox31_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox36.TextChanged, TextBox35.TextChanged, TextBox34.TextChanged, TextBox33.TextChanged, TextBox32.TextChanged, TextBox31.TextChanged
       sender.text = System.Text.RegularExpressions.Regex.Replace(sender.text, "\D", "")
   End Sub

   Private Sub TextBox6_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress, TextBox3.KeyPress, TextBox2.KeyPress, TextBox1.KeyPress
       Button1.Enabled = ((TextBox1.TextLength > 0) And (TextBox2.TextLength > 0) And (TextBox3.TextLength > 0) And (TextBox4.TextLength > 0) ))
       solonumeros(e)
       If e.KeyChar = ChrW(Keys.Enter) Then
           e.Handled = True
           SendKeys.Send("{TAB}")

       End If


   End Sub
End Class]
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#7
símplemente elimina lo que te dije, todo esto:

Citar
Código (vbnet) [Seleccionar]

      Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3) : Array.Sort(Result4) : Array.Sort(Result5) : Array.Sort(Result6)  ' Ordeno los Items
      ' ----------------------------------------------------------------------------
      ' aca que no salgan repetidos en las lineas -------------------------------------
      ' Concateno todos los Arrays (esto es algo opcional, simplemente para hacerlo de una en este ejemplo)
      Dim Results As IEnumerable(Of Integer) =
          Result1.Concat(Result2).Concat(Result3).Concat(Result4)

      For X As Integer = 0 To Results.Count - 1



          TextBoxCount += 1

          Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

              Case False ' El número no está repetido en ninguna "linea"
                  ' Así que colocamos el número en el Textbox
                  TextBox(TextBoxCount).Text = Convert.ToString(Results(X))

              Case True ' El número está repetido en alguna de las "lineas"
                  ' Así que haces lo que quieras con el Número/Textbox
                  MsgBox(Results(X))
                  TextBox(TextBoxCount).Text = -1.ToString

          End Select
      Next X
      ' -----------------------------------------------------------------------

      ' aca vamos con el rango

      For Each Number As Int32 In Result1
          TextBoxCount += 1
          TextBoxes(TextBoxCount).Text = Number
      Next
      ' -----------------------------------------
      For Each Number As Int32 In Result2
          TextBoxCount += 1
          TextBoxes(TextBoxCount).Text = Number
      Next
      ' -----------------------------------------
      For Each Number As Int32 In Result3

          TextBoxCount += 1

          If Not Number > maximum Then
              TextBoxes(TextBoxCount).Text = CStr(Number)
          Else
              TextBoxes(TextBoxCount).Text = CStr(maximum)
          End If

      Next Number
      ' -----------------------------------------
      For Each Number As Int32 In Result4

          TextBoxCount += 1

          If Not Number > maximum Then
              TextBoxes(TextBoxCount).Text = CStr(Number)
          Else
              TextBoxes(TextBoxCount).Text = CStr(maximum)
          End If

      Next Number
      ' -----------------------------------------

Lo dejas así:

Código (vbnet) [Seleccionar]

       Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3)
       Array.Sort(Result4) : Array.Sort(Result5) : Array.Sort(Result6)  ' Ordeno los Items

        TextBoxCount = 0 ' Reseteo el valor a cero

       Dim Results As IEnumerable(Of Integer) =
           Result1.Concat(Result2).Concat(Result3).Concat(Result4) ' concateno arrays

       If Results.Count > TextBoxes.Count Then
           Throw New Exception("La cantidad de números es mayor que la cantidad de Textboxes")
       End If

       For X As Integer = 0 To Results.Count - 1

           TextBoxCount += 1

           Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

               Case False ' El número no está repetido en ninguna "linea"
                   ' Así que colocamos el número en el Textbox
                   Try
                       TextBoxes(TextBoxCount).Text = CStr(Results(X))
                   Catch ex As Exception
                       Throw New Exception(ex.Message & ex.StackTrace)
                   End Try

               Case True ' El número está repetido en alguna de las "lineas"
                   ' Así que escribimos el número "máximo" en el textbox
                   TextBoxes(TextBoxCount).Text = -CStr(maximum)

           End Select

       Next X


Si te da error, muestra el detalle del error.

Saludos!








luis456

#8
No da error pero no hace nada se ejecuta pero no me muestra resultados he limpiado un poco el codigo lo deje a si pero ya me mareo

Código (vbnet) [Seleccionar]
Public Class Form1

   Dim maximum As Short = 99
   Dim x As Integer = 0
   Dim Número As Double
   Private TextBoxes As TextBox() = {Nothing}
   Private Result1 As Int32(), Result2 As Int32(), Result3 As Int32(), Result4 As Int32()
   Private _textBox As Object

   Private Property Calcular As Object

   Private Property TextBox(ByVal TextBoxCount As Short) As Object
       Get
           Return _textBox
       End Get
       Set(ByVal value As Object)
           _textBox = value
       End Set
   End Property
   
   Public Sub solonumeros(ByRef e As System.Windows.Forms.KeyPressEventArgs)
       ' evitar letras
       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 FrmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
       Me.ControlBox = False ' Elimino todos los controles del formulario
   End Sub
   ReadOnly Property Num1 As Int32
       Get
           Return CInt(TextBox1.Text)
       End Get
   End Property

   ReadOnly Property Num2 As Int32
       Get
           Return CInt(TextBox2.Text)
       End Get
   End Property
   ReadOnly Property Num3 As Int32
       Get
           Return CInt(TextBox3.Text)
       End Get
   End Property
   ReadOnly Property Num4 As Int32
       Get
           Return CInt(TextBox4.Text)
       End Get
   End Property

   Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs)



       Dim TextBoxCount As Short = -1

       TextBoxes = {TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20, TextBox21, TextBox22, TextBox23, TextBox24}

       Result1 = {Num1 + 10, Num1 + 20, Num1 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result2 = {Num2 + 10, Num2 + 20, Num2 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result3 = {Num3 + 10, Num3 + 20, Num3 + 30} _
                 .Distinct().ToArray ' Elimino duplicados

       Result4 = {Num4 + 10, Num4 + 20, Num4 + 30} _
                 .Distinct().ToArray ' Elimino duplicados



       Array.Sort(Result1) : Array.Sort(Result2) : Array.Sort(Result3)
       Array.Sort(Result4)   ' Ordeno los Items

       TextBoxCount = 0 ' Reseteo el valor a cero

       Dim Results As IEnumerable(Of Integer) =
           Result1.Concat(Result2).Concat(Result3).Concat(Result4) ' concateno arrays

       If Results.Count > TextBoxes.Count Then
           Throw New Exception("La cantidad de números es mayor que la cantidad de Textboxes")
       End If

       For X As Integer = 0 To Results.Count - 1

           TextBoxCount += 1

           Select Case Results.Where(Function(n) n = Results(X)).Skip(1).Any

               Case False ' El número no está repetido en ninguna "linea"
                   ' Así que colocamos el número en el Textbox
                   Try
                       TextBoxes(TextBoxCount).Text = CStr(Results(X))
                   Catch ex As Exception
                       Throw New Exception(ex.Message & ex.StackTrace)
                   End Try

               Case True ' El número está repetido en alguna de las "lineas"
                   ' Así que escribimos el número "máximo" en el textbox
                   TextBoxes(TextBoxCount).Text = -CStr(maximum)

           End Select

       Next X

   End Sub
End Class


Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#9
Claro q no hace nada, fíjate en el método sumar:

Citar
Código (vbnet) [Seleccionar]
Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs)

Originálmente era:
Citar
Código (vbnet) [Seleccionar]
Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

Le quitaste la claúsula Handles

EDITO:
y aquí lo mismo:
Citar
Código (vbnet) [Seleccionar]
Private Sub FrmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

...Handles mybase.load

Revisa todos los controladores de eventos de tú código y corrígelos

Saludos!