none
Ejecutar un código determinado si un checkbox está checkeado. RRS feed

  • Pregunta

  • Necesito sabre si se puede hacer esto: yo al pulsar un botón este recorre todos los checkbox y si están en True les tengo condicionados que hagan una cosa, pero el problema es que ese procedimiento ocupa muchas líneas, y quisiera que solamente hiciera el recorrido y después se ejecutara el código correspondiente, pero sin tener que escribir la condición If ... End If para saber si están todos cheakados. Un ejemplo, para ver si me explico:

    If Chk1.CheckState = True Then

    MsgBox("Hola")

    End If

    If Chk2.CheckState = True Then

    MsgBox("Adiós")

    End If

    If Chk3.CheckState = True Then

    MsgBox("Alá")

    End If

    If Chk4.CheckState = True Then

    MsgBox("AComer")

    End If

    Esto es lo que No quiero poner. Se os ocurre como hacer para cada Checkbox tengo su propio código vinculado a él. Por cierto me pueden servir CheckStateChanged y CheckedChanged para hacer algo, porque no sé que diferencia hay entre ellas.



    Si la contestación te ha servido de ayuda márcala como respuesta. Si lo que publico no funciona, no tengo la culpa, SOY HUMANO, no una máquina.


    • Editado LTNs domingo, 7 de diciembre de 2014 17:38
    • Cambiado Enrique M. Montejo martes, 9 de diciembre de 2014 7:30 Pregunta relacionada con controles de aplicación Windows Forms.
    domingo, 7 de diciembre de 2014 17:16

Todas las respuestas

  • Hola:

     para recorerr los controles podrías usar algo como esto:

    for each chk in allcheckboxes
    if chk.checked Then
    	''ejecutas lo que desees
    end if
    next chk

    Para poder usar le evento CheckedChanged del control podrías crear un evento en común en la suscribes a todos los controles:

    En este link se ofrece un ejemplo creado en C# pero la traducción a Visual Basic podrías hacerla utilizando esta herramienta:

    converter.telerik.com

    Aquí otro ejemplo usando visual basic:

    October 2006 Article 5 of 7 Index: More articles from this author: Generic click event handler in VB.NET


    Saludos desde Monterrey, Nuevo León, México!!!

    domingo, 7 de diciembre de 2014 17:41
  • No sé quien está más verde, si tu o los que han respondido antes..

    Icontainer contiene una colección de objetos control (form1.Controls).

    Para comprobar recursivamente los controles del mismo tipo (ya sean textbox, checkbox o label):

    for each c as Control in Me.Controls
         if c.GetType() = GetType(CheckBox) then
           'es un checkbox
            dim check as checkbox = ctype(c,CheckBox)
            'aqui puedes ver sus propiedades (Text,Name,Tag..)
            if check.CHeked = true then
              'esta chekeado
            end if
         end if
    next
    

    Luego, si lo que quieres es comprobar o guardar los estados, .NET es orientado a objetos, pudiendo crear tu propio objeto y serializarlo, otra manera es usar los objetos existentes como Hashtable:

    dim chekeados as new list(of string)
    dim todos as new hashtable
    for each c as Control in Me.Controls
         if c.GetType() = GetType(CheckBox) then
           'es un checkbox
            dim check as checkbox = ctype(c,CheckBox)
            'aqui puedes ver sus propiedades (Text,Name,Tag..)
            todos.Add(check.Name,check.Cheked)
            if check.CHeked = true then
              'esta chekeado
              chekeados.Add(check.Text)
            end if
         end if
    next
    
    Esta sería la manera más "memory friendly", luego si decides llenar todo de tags o guardar los checkboxes en una colección, que sepas que estarás haciendo algo fatal.

    Hazte algún curso en Microsoft Virtual Academy, estas cosas son de lo más básico en Winforms, y los demás que han puesto soluciones.. también os lo recomiendo.

    Un saludo

    domingo, 7 de diciembre de 2014 19:26
  • Gracias a todos por responder pero no era eso a lo que me refería porque así es como lo estoy haciendo, utilizo el control RadTreeview de Telerik el cual ofrece una funcionalidad para buscar todos los nodos que están Checkeados mediante el uso de un For Each, y lo que quiero es que con el valor que obtengo se ejecute un procedimiento determinado a dicho elemento.

    Otra parte que hago que no sé si es bueno es obtener el nombre del elemento que está checkeado y con un Select Case ejecuto su procedimiento. 

    Esto es:

    For Each CheckSel As RadTreeNode In RadTreeview1.CheckedNodes 'Obtengo los nodos chekeados. Me marca System.NullReference
    'Aquí es donde me gustaría poner lo que se tendría que ejecutar.
    Next


    Si la contestación te ha servido de ayuda márcala como respuesta. Si lo que publico no funciona, no tengo la culpa, SOY HUMANO, no una máquina.


    • Editado LTNs lunes, 8 de diciembre de 2014 11:05
    lunes, 8 de diciembre de 2014 9:58
  • Ya conseguí hacer lo que buscaba.

    Si la contestación te ha servido de ayuda márcala como respuesta. Si lo que publico no funciona, no tengo la culpa, SOY HUMANO, no una máquina.

    • Marcado como respuesta LTNs lunes, 8 de diciembre de 2014 17:34
    • Desmarcado como respuesta Enrique M. Montejo martes, 9 de diciembre de 2014 7:29
    lunes, 8 de diciembre de 2014 17:34
  • podrías poner tu solución? Así otros compañeros,que busquen un ejemplo verán tu respuesta y lea ayudará. Gracias

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

    lunes, 8 de diciembre de 2014 19:45