none
Activar Boton cuando diferentes controles esten llenos

    Pregunta

  • Dim listaTxt As New List(Of Control) Private Sub cambioContenido(sender As Object, e As EventArgs) btngrabar.Enabled = listaTxt.Where(Function(x) x.GetType = GetType(CheckBox)). All(Function(x) CType(x, CheckBox).Checked = True) End Sub Private Sub hasContent(sender As Object, e As EventArgs) btngrabar.Enabled = listaTxt.All(Function(x) x.Text.Trim().Length <> 0) End Sub Private Sub Admisiones_Estudiantes_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load lblfecha.Text = DateTime.Now().ToLongDateString() TabControl1.SelectedTab = TabPage1 Timer1.Enabled = True btngrabar.Enabled = False listaTxt.AddRange(New Control() {txtapellidopaterno, txtapellidomaterno, txtnombre}) For Each ctrl As Control In listaTxt Select Case ctrl.GetType Case GetType(TextBox) AddHandler DirectCast(ctrl, TextBox).TextChanged, AddressOf hasContent Case GetType(CheckBox) AddHandler DirectCast(ctrl, CheckBox).CheckedChanged, AddressOf cambioContenido Case Else 'Es otro tipo... End Select Next

    end sub


    Tengo  3 textbox y 5 radio button, no tengo problemas con la lista de los textbox pero quiero que cuando marque unos olo de los radio botton entonces se acrive el boton  si pongo los radio buton en la lista no me funciona por que me require que todos esten en true y solo puedo tener uno en true, quiero que cuando escriba en estos tres textbox y marque cualquiera de los radio buton se acrive el button
    • Editado Efrain Diaz martes, 22 de noviembre de 2016 13:01
    martes, 22 de noviembre de 2016 13:00

Respuestas

  • Efrain Diaz,

    Yo evitaría la lista de controles porque de por sí los controles ya están contenidos dentro de una colección. En el caso de los controles RadioButton únicamente uno va a estar seleccionado (a menos que tengas varios grupos de objetos de tipo RadioButton), por tanto no veo la necesidad de validación, sin embargo si requieres inicializar sin ninguna selección por defecto podrías hacer lo siguiente:

    Vincular los controles a un único controlador de eventos, por ejemplo tengo dos cajas de texto y dos objetos de tipo RadioButton

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
    	AddHandler txtNom.TextChanged, AddressOf ValidarCajaTexto
    	AddHandler txtApe.TextChanged, AddressOf ValidarCajaTexto
    
    	AddHandler radioButton1.CheckedChanged, AddressOf ValidarRadioButton
    	AddHandler radioButton2.CheckedChanged, AddressOf ValidarRadioButton
    
    	btnGuardar.Enabled = False
    	
    End Sub


    Luego creo un método común que permitirá validar todos los controles (en este caso los objetos de tipo TextBox y RadioButton)

    Private Function ValidarControles() As Boolean
    
    	Return Not Me.Controls.OfType(Of TextBox)().
    		Any(Function(t) String.IsNullOrEmpty(t.Text)) AndAlso
    		Me.Controls.OfType(Of RadioButton)().Any(Function(t) t.Checked)
    
    End Function


    Finalmente en cada controlador de evento invoco al método  creado:

    Private Sub ValidarRadioButton(sender As Object, e As EventArgs)
    
    	btnGuardar.Enabled = ValidarControles()
    
    End Sub
    
    Private Sub ValidarCajaTexto(sender As Object, e As EventArgs)
    
    	btnGuardar.Enabled = ValidarControles()
    
    End Sub

    Queda de ti ampliar para otros controles o casos que tengas:


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Marcado como respuesta Efrain Diaz martes, 22 de noviembre de 2016 18:33
    martes, 22 de noviembre de 2016 18:11

Todas las respuestas

  • Pero no puedo dejar los textbox fuera, no solo son checkbox tambien hay varios textbox
    martes, 22 de noviembre de 2016 14:15
  • Efrain Diaz,

    Si es una tema de validación veo innecesario que agregues los controles a una lista cuando de por sí todos los controles pertenecen a una colección sobre la cual podrías iterar y validar fácilmente.

    Sobre lo que tienes, tampoco te compliques con los controles RadioButton, es de esperar que uno tenga la propiedad Checked en True (por defecto) y el usuario se encargará de modificar la selección de la opción, en cualquier caso únicamente estará seleccionado un objeto, no veo que tengas que validar por los objetos RadioButton.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 22 de noviembre de 2016 15:57
  • William veo tu punto, el caso es que necesito recoger en una function, metodo o de alguna manera la forma de que si ciertos textbox y por lo menos unos de cuatro radio button esten llenos en el caso de los text y checked en el caso de los radio no se habilite el boton grabar, he visto muchsimia info pero ninguna me ha trabajado, como lo harias tu
    martes, 22 de noviembre de 2016 17:26
  • Efrain Diaz,

    Yo evitaría la lista de controles porque de por sí los controles ya están contenidos dentro de una colección. En el caso de los controles RadioButton únicamente uno va a estar seleccionado (a menos que tengas varios grupos de objetos de tipo RadioButton), por tanto no veo la necesidad de validación, sin embargo si requieres inicializar sin ninguna selección por defecto podrías hacer lo siguiente:

    Vincular los controles a un único controlador de eventos, por ejemplo tengo dos cajas de texto y dos objetos de tipo RadioButton

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
    	AddHandler txtNom.TextChanged, AddressOf ValidarCajaTexto
    	AddHandler txtApe.TextChanged, AddressOf ValidarCajaTexto
    
    	AddHandler radioButton1.CheckedChanged, AddressOf ValidarRadioButton
    	AddHandler radioButton2.CheckedChanged, AddressOf ValidarRadioButton
    
    	btnGuardar.Enabled = False
    	
    End Sub


    Luego creo un método común que permitirá validar todos los controles (en este caso los objetos de tipo TextBox y RadioButton)

    Private Function ValidarControles() As Boolean
    
    	Return Not Me.Controls.OfType(Of TextBox)().
    		Any(Function(t) String.IsNullOrEmpty(t.Text)) AndAlso
    		Me.Controls.OfType(Of RadioButton)().Any(Function(t) t.Checked)
    
    End Function


    Finalmente en cada controlador de evento invoco al método  creado:

    Private Sub ValidarRadioButton(sender As Object, e As EventArgs)
    
    	btnGuardar.Enabled = ValidarControles()
    
    End Sub
    
    Private Sub ValidarCajaTexto(sender As Object, e As EventArgs)
    
    	btnGuardar.Enabled = ValidarControles()
    
    End Sub

    Queda de ti ampliar para otros controles o casos que tengas:


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Marcado como respuesta Efrain Diaz martes, 22 de noviembre de 2016 18:33
    martes, 22 de noviembre de 2016 18:11