Principales respuestas
detectar que textbox estan vacios y ordenarlos

Pregunta
-
en el sistema tengo 4 textbox:
textbox1, textbox2, textbox3, textbox4
lo que quiero es que si yo coloco algo en uno de esos textbox me identifique cual es que no no esta vacio y luego en otros 4 textbox me lo coloque en el textbox 1 el que identifico
nastar
Respuestas
-
Puedes utilizar el método Sort() disponible desde la versión 2.0 del marco de trabajo de .NET. El ejemplo funcionará en tanto los valores que contiene los cuadros de texto sean numéricos, si los valores son alfanuméricos cambia el tipo del array.
'Asignar valores de ejemplo TextBox1.Text = "4" TextBox2.Text = "2" TextBox3.Text = "1" TextBox4.Text = "3" 'Recuperar los objetos con sufijo 1-4 ordenados según el valor y sufijo Dim ObjetosConValor = New List(Of Integer) From { CInt(TextBox1.Text), CInt(TextBox2.Text), CInt(TextBox3.Text), CInt(TextBox4.Text)} ObjetosConValor.Sort() 'Asignar los valores a los objetos con sufijo 5-8 For index = 0 To 3 Me.Panel1.Controls("TextBox" + CStr(5 + index)).Text = ObjetosConValor(index).ToString Next
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator jueves, 16 de marzo de 2017 15:28
- Marcado como respuesta Enrique M. MontejoModerator sábado, 18 de marzo de 2017 10:38
Todas las respuestas
-
No entiendo tu pregunta, te refieres a validar que los textbox si esta vacio te lo notifique? En otras palabras tienes 8 Textbox?
Si vas a validar los textbox alguno esta vacio puedes usar algo asi:
If TextBox1.Text.Trim().Length = 0 Or TextBox2.Text.Trim().Length = 0 Or TextBox3.Text.Trim().Length = 0 Or TextBox4.Text.Trim().Length = 0 Then MessageBox.Show( "Complete los campos") Exit Sub End If
-
en total tengo 8 textbox pero solo 4 utilizo para verificar cuales de todos esos 4 hay caracteres. y luego en los otros 4 me los los ordene, por ejemplo
textbox2 y textbox 4 contienen caracteres, entonces lo que quiero es que en los otros 4 textbox me ordene: ejemplo
textbox1 esta vacio
textbox2 contiene carácter
textbox3 esta vacio
textbox4 contiene carácter
-------------------- y me los ordene asi
textbox5 obtiene el dato del valor que tiene el textbox2 ya que el el primero que esta de los 4 textbox
textbox6 obtiene el dato del valor que tiene el textbox4 ya que el el segundo que esta de los 4 textbox
textbox7
textbox8
nastar
-
Puedes basar la búsqueda según el formato de nombre del objeto, el ejercicio se basa en que los ocho objetos se nombran bajo la forma: TextBox1, TextBox2, TextBox3, ... TextBox8 y que los mismos se encuentran dentro del contenedor de nombre Panel1 (omitir o cambiar):
Private Sub btnProcesar_Click(sender As Object, e As EventArgs) Handles btnProcesar.Click 'Asignar valores de ejemplo TextBox1.Text = String.Empty TextBox2.Text = "Valor 1" TextBox3.Text = String.Empty TextBox4.Text = "Valor 2" 'Recuperar los objetos con sufijo 1-4 ordenados según el valor y sufijo Dim ObjetosConValor = Me.Panel1.Controls.OfType(Of TextBox). Where(Function(t) t.Text <> String.Empty AndAlso CInt(t.Name.Substring(7)) <= 4). OrderBy(Function(t) CInt(t.Name.Substring(7))).Select(Function(t) t.Text) 'Asignar los valores a los objetos con sufijo 5-8 For index = 0 To 3 Me.Panel1.Controls("TextBox" + CStr(5 + index)).Text = ObjetosConValor(index) Next End Sub
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
-
Necesitas indicar el espacio de nombres: Imports System.Linq
Si te complica la consulta Linq anterior puedes hacer algo mas simple, que por la cantidad de objetos vale.
'Asignar valores de ejemplo '... 'Recuperar los objetos con sufijo 1-4 Dim ObjetosConValor = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}. Where(Function(t) t.Text <> String.Empty).Select(Function(t) t.Text) 'Asignar los valores a los objetos con sufijo 5-8 '...
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
cuando coloque tu otro codigo para no complicarme como tu dice me salio este mensaje:
'Where' no es un miembro de 'System.Array'.
Tu codigo:
'Asignar valores de ejemplo '... 'Recuperar los objetos con sufijo 1-4 Dim ObjetosConValor = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}. Where(Function(t) t.Text <> String.Empty).Select(Function(t) t.Text) 'Asignar los valores a los objetos con sufijo 5-8 '...
nastar
-
-
si y me dice esto:
El espacio de nombres o el tipo especificado en las importaciones 'System.Linq' no contienen ningún miembro público o no se encuentran. Asegúrese de que el espacio de nombres o el tipo se hayan definido y de que contengan al menos un miembro público. Asegúrese de que el nombre del elemento importado no utilice ningún alias.
nastar
-
System.Linq es el espacio de nombres del ensamblado System.Core, es probable que no tengas agregado la referencia.
Si tienes dudas respecto al procedimiento lee el siguiente enlace How to: Create a LINQ Project, concéntrate en la sección: 'Para habilitar la funcionalidad básica de LINQ'
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
textbox1.text="4"
textbox2.text="2"
textbox3.text="1"
textbox4.text="3"
----------------------------
como ordenaria de menor a mayor en otros 4 textbox, ejemplo
textbox5.text="1"
textbox6.text="2"
textbox7.text="3"
textbox8.text="4"
nastar
- Editado german634 miércoles, 15 de marzo de 2017 19:21 corrección
-
Debes ordenar la colección
Dim ObjetosConValor = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}. Where(Function(t) t.Text <> String.Empty).OrderBy(Function(t) t.Text). Select(Function(t) t.Text)
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
-
Hola Nuevamente estado viendo esto: y bueno no es exactamente lo que preguntas pero podria servirte a que lo modifiques a como deseas:
En este caso si uno de los textbox esta vacio me lo sombrea en amarillo y le envia el foco.
Private Function ValidaDatos() As Boolean Dim Ctl As Control Dim x As Integer For x = Me.Controls.Count - 1 To 0 Step -1 Ctl = Me.Controls.Item(x) If TypeOf (Ctl) Is TextBox Then Dim Control As TextBox = Ctl If Control.Tag = 1 Then If Control.Text.Trim = "" Then MsgBox("Campo Esta Vacio" & Control.AccessibleName) Control.BackColor = Color.Yellow Control.Focus() ValidaDatos = False Exit Function Else Control.BackColor = Color.White End If End If End If If TypeOf (Ctl) Is ComboBox Then Dim Control As ComboBox = Ctl If Control.Tag = 1 Then If Control.Text.Trim = "" Then MsgBox("Campo esta Vacio" & Control.AccessibleName) Control.BackColor = Color.Yellow Control.Focus() ValidaDatos = False Exit Function Else Control.BackColor = Color.White End If End If End If Next ValidaDatos = True End Function
y en un boton:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click If TextBox1.Text.Trim().Length = 0 Or TextBox2.Text.Trim().Length = 0 Or TextBox3.Text.Trim().Length = 0 Or TextBox4.Text.Trim().Length = 0 Then ValidaDatos() Else MessageBox.Show("Contiene caracteres") End If End Sub
Quizas William con mas experiencia pueda hacerle algun arreglo.
- Editado Javier Roque miércoles, 15 de marzo de 2017 20:13
-
Puedes utilizar el método Sort() disponible desde la versión 2.0 del marco de trabajo de .NET. El ejemplo funcionará en tanto los valores que contiene los cuadros de texto sean numéricos, si los valores son alfanuméricos cambia el tipo del array.
'Asignar valores de ejemplo TextBox1.Text = "4" TextBox2.Text = "2" TextBox3.Text = "1" TextBox4.Text = "3" 'Recuperar los objetos con sufijo 1-4 ordenados según el valor y sufijo Dim ObjetosConValor = New List(Of Integer) From { CInt(TextBox1.Text), CInt(TextBox2.Text), CInt(TextBox3.Text), CInt(TextBox4.Text)} ObjetosConValor.Sort() 'Asignar los valores a los objetos con sufijo 5-8 For index = 0 To 3 Me.Panel1.Controls("TextBox" + CStr(5 + index)).Text = ObjetosConValor(index).ToString Next
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator jueves, 16 de marzo de 2017 15:28
- Marcado como respuesta Enrique M. MontejoModerator sábado, 18 de marzo de 2017 10:38