Pregunta

Tengo un panel y dos LinkLabels agregados en el panel y una vista de árbol.

Ahora en el evento Panel_Paint, quiero que los colores de LinkLabel se vuelvan de blanco y el color de fondo de TreeView se vuelva negro. ¿Cómo hago esto?

El siguiente código funciona solo cuando no hay una vista de árbol en el panel, pero cuando agrego una vista de árbol también en el panel, entonces dice:

No se puede lanzar objeto de tipo 'System.windows.forms.treeview' TO Tipo 'System.windows.Forms.LinkLabel'.

foreach (LinkLabel link in panel1.Controls)
{         
    link.LinkColor = Color.White; 
}
¿Fue útil?

Solución

Su panel contiene todos los controles: uno de ellos es un TreeView que no se puede lanzar en un LinkLabel. En su bucle debe verificar el tipo de control como este:

foreach (Control control in panel1.Controls)
{
   if (control is LinkLabel)
   {
       ... set link color
   }
   else if (control is TreeView)
   {
       ... set background
   }
}

Alternativamente, si solo tienes uno LinkLabel y uno TreeView No necesitaría un bucle, solo acceda a ellos por su nombre como lo hizo con panel1

Otros consejos

Prueba esto:

foreach (Control ctrl in panel1.Controls)
{
     LinkLabel link = ctrl as LinkLabel;
     if(link != null)
        link.LinkColor = Color.White; 
}

Está recibiendo el error porque está tratando de lanzar todos los controles en Panel1 a un LinkLabel. Necesitas probar algo como esto

foreach (Control control in panel1.Controls)
{
       if (control.GetType() == typeof(LinkLabel))
       {
            LinkLabel link = (LinkLabel)control;
            link.LinkColor = Color.White; 
       } 
}

Espero que esto ayude.

Editar: Sabía que había un método, pero no estaba seguro del 100% del nombre o sintaxis. Vea a continuación una respuesta mejorada.

foreach (LinkLabel link in panel1.Controls.OfType<LinkLabel>())
{
    link.LinkColor = Color.White;
}

Espero que esto sea mejor para ti.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top