none
problemas al ver funcion con linq utiliando checkbox

    Pregunta

  • Dim listaTxt As New List(Of Control)
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        listaTxt.AddRange(New Control() {TextBox1, CheckBox1, TextBox2})
    
        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
    
    
    Y crea los método que trabajarán para cada tipo :
        Private Sub cambioContenido(sender As Object, e As EventArgs)
            'Hacer algo para los Checkbox
    btngrabar.Enabled = listaTxt.All(Function(x) x.Checked = True)-(no me deja ver el x.cheked
    
        End Sub
    
        Private Sub hasContent(sender As Object, e As EventArgs)
            'Hacer algo para los TextBox
    btngrabar.Enabled = listaTxt.All(Function(x) x.Text.Trim().Length <> 0)
        End Sub
    
    Tengo este condigo utilizando linq en la parte de los textbox no tengo problemas pero cuando quiero ver la function de los checkbox no me presenta  para escoger x.Cheked de los checkbox a pesar que es una lista de controles
    lunes, 21 de noviembre de 2016 19:58

Respuestas

  • Hola Efrain Diaz,

    Lo que pasa es que al ser una lista de tipo Control, esta clase no tiene el atributo Checked (el cual es exclusivo del CheckBox), tendrías que hacer un CAST.

    - Antes de usar la función All(..) primero selecciona solo los controles del tipo CheckBox, para evitar que otros controles como TextBox se casteen a CheckBox y originen un error.

    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

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Efrain Diaz lunes, 21 de noviembre de 2016 20:12
    lunes, 21 de noviembre de 2016 20:05
  • listaTxt es una Lista de Control. Todos los Control tienen una propiedad .Text, y por eso puedes poner x.Text en el hasContent. Pero no todos tienen .Checked, por eso no te lo admite. Si fuera una lista de Checkbox en lugar de una lista de Control, si funcionaria.
    • Marcado como respuesta Efrain Diaz lunes, 21 de noviembre de 2016 20:12
    lunes, 21 de noviembre de 2016 20:07

Todas las respuestas

  • Hola Efrain Diaz,

    Lo que pasa es que al ser una lista de tipo Control, esta clase no tiene el atributo Checked (el cual es exclusivo del CheckBox), tendrías que hacer un CAST.

    - Antes de usar la función All(..) primero selecciona solo los controles del tipo CheckBox, para evitar que otros controles como TextBox se casteen a CheckBox y originen un error.

    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

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Efrain Diaz lunes, 21 de noviembre de 2016 20:12
    lunes, 21 de noviembre de 2016 20:05
  • listaTxt es una Lista de Control. Todos los Control tienen una propiedad .Text, y por eso puedes poner x.Text en el hasContent. Pero no todos tienen .Checked, por eso no te lo admite. Si fuera una lista de Checkbox en lugar de una lista de Control, si funcionaria.
    • Marcado como respuesta Efrain Diaz lunes, 21 de noviembre de 2016 20:12
    lunes, 21 de noviembre de 2016 20:07
  • pense que al ser una lista de controles heredaba todas las propiedades de cada unos de los controles que puedirea poner, pero gracias
    lunes, 21 de noviembre de 2016 20:12