none
detectar que textbox estan vacios y ordenarlos RRS feed

  • 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

    miércoles, 15 de marzo de 2017 16:02

Respuestas

  • german634,

    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.
    miércoles, 15 de marzo de 2017 20:02

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

    miércoles, 15 de marzo de 2017 16:13
  • 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

    miércoles, 15 de marzo de 2017 16:20
  • german634,

    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.
    miércoles, 15 de marzo de 2017 17:13
  • me sale ese siguiente error: subrayando Me.Panel1.Controls.OfType

     'OfType' no es un miembro de 'System.Windows.Forms.Control.ControlCollection'


    nastar

    miércoles, 15 de marzo de 2017 17:39
  • german634,

    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.
    miércoles, 15 de marzo de 2017 17:51
  • 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

    miércoles, 15 de marzo de 2017 18:00
  • ¿Has escrito el espacio de nombres Imports System.Linq?
    miércoles, 15 de marzo de 2017 18:12
  • 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

    miércoles, 15 de marzo de 2017 18:16
  • german634,

    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.
    miércoles, 15 de marzo de 2017 18:46
  • 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
    miércoles, 15 de marzo de 2017 19:20
  • 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.
    miércoles, 15 de marzo de 2017 19:29
  • no puedo agregar la referencia System.Core ya que estoy utilizando mi sistema bajo .NET Framework 3.0 y para agrear esa referencia tiene que ser .NET Framework 4.0.. no hay otra forma de hacer lo que te mencione?


    nastar

    miércoles, 15 de marzo de 2017 19:39
  • 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
    miércoles, 15 de marzo de 2017 20:02
  • german634,

    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.
    miércoles, 15 de marzo de 2017 20:02