Título: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 3 Diciembre 2013, 16:53 pm
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 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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: Eleкtro en 3 Diciembre 2013, 17:58 pm
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. 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!
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 4 Diciembre 2013, 18:37 pm
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 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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: .:Weeds:. en 4 Diciembre 2013, 18:51 pm
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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 4 Diciembre 2013, 19:05 pm
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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: Eleкtro en 4 Diciembre 2013, 19:27 pm
Cito mis palabras: Podrí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: 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: 'Una funcion devuelve un valor, osea tiene un return 'Esta funcion no tiene un return
Ejemplo: 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
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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 4 Diciembre 2013, 19:47 pm
Tiemblo cada ves que veo que Elektro me responde jejejej,bueno aca va 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]
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: Eleкtro en 4 Diciembre 2013, 19:59 pm
símplemente elimina lo que te dije, todo esto: 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í: 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!
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 4 Diciembre 2013, 20:27 pm
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 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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: Eleкtro en 4 Diciembre 2013, 20:41 pm
Claro q no hace nada, fíjate en el método sumar: Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs)
Originálmente era: Private Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Le quitaste la claúsula HandlesEDITO:y aquí lo mismo: Private Sub FrmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
...Handles mybase.loadRevisa todos los controladores de eventos de tú código y corrígelosSaludos!
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 4 Diciembre 2013, 20:48 pm
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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 5 Diciembre 2013, 19:08 pm
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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: Eleкtro 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: TextBoxCount = 0 ' Reseteo el valor a cero
Por esto otro: TextBoxCount = -1 ' Reseteo el valor a -1
Pero eso resulta algo confuso, mejor coloca la linea que te dije donde debe ir colocada. saludos
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 6 Diciembre 2013, 06:58 am
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: 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 :) 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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: Eleкtro en 6 Diciembre 2013, 14:17 pm
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
Título: Re: Vuelvo al ataque con los texboxes :) evitar repe
Publicado por: luis456 en 6 Diciembre 2013, 19:21 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
|