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
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!
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
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
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
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
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 '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
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
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]
símplemente elimina lo que te dije, todo esto:
Citar
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!
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
Claro q no hace nada, fíjate en el método sumar:
CitarPrivate Sub Sumar(ByVal sender As Object, ByVal e As EventArgs)
Originálmente era:
CitarPrivate Sub Sumar(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Le quitaste la claúsula
HandlesEDITO:y aquí lo mismo:
CitarPrivate 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!
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
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
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:
CitarTextBoxCount += 1
EDITO:O bien otra manera de solucionarlo puedes modificar esto:
CitarTextBoxCount = 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
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:
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
Citar
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
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