none
opcion de poner un or en una lista

    Pregunta

  • Dim listaTxt As New List(Of Control) listaTxt.AddRange(New Control() {TextBox1,TextBox2}) listaTxt.AddRange(New Control() {TextBox1,TextBox2 or chkuno or chk2 or chk3}) (quiero que pueda utilizer un or dentro del range de la lista osea que los txtbox1 y txtbox2

    sean obligatorios pero que se pueda marcar cualquiera de los chk si es que eso es posible


    lunes, 21 de noviembre de 2016 20:39

Respuestas

  • Hola Efrain Diaz,

    Pero si solo quieres permitir la selección de un elemento, te convendría usar el RadioButton. Ten en cuenta que el CheckBox está diseñado para permitir la selección de varias opciones incluyendo todos.

    Dim rb = Me.Controls.OfType(Of RadioButton).FirstOrDefault(Function(x) x.Checked)
    
    listaTxt.AddRange(New Control() {TextBox1, TextBox2, rb})

    Pero antes tienes que validar que seleccione un RadioButton, ya que si no el FirstOrDefault retornaría nulo.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 21 de noviembre de 2016 21:46
  • Hazlo en dos tandas si quieres.

    listaTxt.AddRange(New Control() {TextBox1,TextBox2 })
    listaTxt.AddRange(Me.Controls.OfType(Of CheckBox).Where(Function(chk) chk.Checked).ToList())


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos



    lunes, 21 de noviembre de 2016 22:26

Todas las respuestas

  • Hola Efrain Diaz,

    Pero para escoger entre los CheckBox mencionados tiene que haber una validación.

    - Si el chk esta 'checkeado' agregarlo, caso contrario omitirlo (no lo toma), así con todos ? Podrías validar cada chk y consultar su estado para agregarlo a la lista.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 21 de noviembre de 2016 21:26
  •   Dim listaTxt As New List(Of Control)
    
         
        Private Sub cambioContenido(sender As Object, e As EventArgs)
            'Hacer algo para los CheckBox
            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)
            'Hacer algo para los TextBox
            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
    El ejemplo concreto es este lo unico que en la lista tengo que anadirle que sean esos tres textbox que ya estan o cualquiera de los checkbox pero no pueden ser todos sino que cualquiera de ellos este check, claro esta en la lista todavia no los he puesto por que no se como puedo hacer para que puedan escojer cualquiera de ellos y no todos, ya trate poniendolos todos y si no estan check todos se queda en boton disable... a ver si me explique bien
    lunes, 21 de noviembre de 2016 21:33
  • Hola Efrain Diaz,

    Pero si solo quieres permitir la selección de un elemento, te convendría usar el RadioButton. Ten en cuenta que el CheckBox está diseñado para permitir la selección de varias opciones incluyendo todos.

    Dim rb = Me.Controls.OfType(Of RadioButton).FirstOrDefault(Function(x) x.Checked)
    
    listaTxt.AddRange(New Control() {TextBox1, TextBox2, rb})

    Pero antes tienes que validar que seleccione un RadioButton, ya que si no el FirstOrDefault retornaría nulo.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 21 de noviembre de 2016 21:46
  • y donde pondria el Dim rb = Me.controls       dejandome llevar por el ejemplo del codigo que tengo
    lunes, 21 de noviembre de 2016 22:07
  • Hazlo en dos tandas si quieres.

    listaTxt.AddRange(New Control() {TextBox1,TextBox2 })
    listaTxt.AddRange(Me.Controls.OfType(Of CheckBox).Where(Function(chk) chk.Checked).ToList())


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos



    lunes, 21 de noviembre de 2016 22:26
  • trate de hacerlo asi pero me dio un error
    lunes, 21 de noviembre de 2016 22:44
  • Puedes indicar el error? Para poder ayudar necesitamos más información. Tal vez me haya faltado agregar el ToList() en mi código. He editado mi anterior respuesta. Gracias


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    martes, 22 de noviembre de 2016 7:39