Vuelvo al ataque con los texboxes :) evitar repe

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

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

luis456

Yo creo que sigo mañana  :-( ya son muchas horas despierto me levanto a las 5 de la mañana a ver que hago con este vicio jejej a las 7 me marcho a currar de mecánico menos mal que ahora son 8 horas de continuo (hasta el mes pasado  10 horas  al dia y por supuesto con  bajada de sueldo) bueno estoy cansado gracias por todo ya mañana sera otra ves que " ATACO " jeje

Gracias

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

luis456

Hola de nuevo :)

Bueno funciona salvo que el texbox5 que seria el primero en recibir resultados se queda en blanco probe a eliminarlo y el siquiente le pasa lo mismo ???


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

Eleкtro

#12
En el método sumar, la variable TextBoxCount empieza a contar desde 1, 1 es el segundo elemento, por eso se salta el TextBox5.

Para corregirlo, borra esta linea del principio del bloque del For, y ponla al final del bloque:
Citar
Código (vbnet) [Seleccionar]
TextBoxCount += 1

EDITO:
O bien otra manera de solucionarlo puedes modificar esto:
Citar
Código (vbnet) [Seleccionar]
TextBoxCount = 0 ' Reseteo el valor a cero
Por esto otro:
Código (vbnet) [Seleccionar]
TextBoxCount = -1 ' Reseteo el valor a -1
Pero eso resulta algo confuso, mejor coloca la linea que te dije donde debe ir colocada.

saludos








luis456

#13
Cita de: EleKtro H@cker en  5 Diciembre 2013, 19:53 PM
En el método sumar, la variable TextBoxCount empieza a contar desde 1, 1 es el segundo elemento, por eso se salta el TextBox5.

Para corregirlo, borra esta linea del principio del bloque del For, y ponla al final del bloque:
EDITO:
O bien otra manera de solucionarlo puedes modificar esto:Por esto otro:
Código (vbnet) [Seleccionar]
TextBoxCount = -1 ' Reseteo el valor a -1
Pero eso resulta algo confuso, mejor coloca la linea que te dije donde debe ir colocada.

saludos



Sigo en lo mismo :)

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

 
   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 = {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 = -1 ' Reseteo el valor a cero <------cambie como dijiste y nada

       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 '  <------cambie  y nada tambien lo cambie de sitio

           TextBoxCount += 0 '  <------cambie  y nada

           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

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

   End Sub
End Class


Luis



Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#14
Citar
Código (vbnet,4,5) [Seleccionar]

Dim TextBoxCount As Short = -1
TextBoxCount = -1
'TextBoxCount += 1
TextBoxCount += 0
TextBoxes = {TextBox6, ...}

Todo eso me sacó de quizio.

No es necesario darle tantas vueltas,
Inicializa la variable con valor 0, y le sumas un valor de 1 al final del bloque del For, no al principio, así el primer elemento procesado será Textboxes(0), es decir, el Textbox5, o mejor dicho, el TextBox6, porque el Textbox5 lo has quitado del Array.

sub sumar

    TextBoxes = {TextBox5, TextBox6, ...}
   TextBoxCount = 0

   For X...

       select case...
       end select

       ' última orden:
       TextBoxCount +=1

   Next X

end sub


Saludos








luis456

#15
Cita de: EleKtro H@cker en  6 Diciembre 2013, 14:17 PM

Todo eso me sacó de quizio.
jejjejje

Ya esta funcionando gracias Elektro pero no creas te dejare tranquilo seguro algo se me ocurrira :)

Luis

Que tu sabiduria no sea motivo de Humillacion para los demas