none
Cambiar colores de fondo de controles agregados dinámicamente RRS feed

  • Pregunta

  • Buenas. Quería saber como hacer para cambiar el color de fondo de algunos controles agregados dinámicamente (usando datos de una DB). Se generan 4 controles: un panel, dos labels y un picturebox. Lo que quiero es que al pasar el cursor sobre el panel (uso el siguiente evento:)

    pCuenta.MouseEnter += new System.EventHandler(EventoMouseEncima);

    Se cambie el fondo del los labels y del picturebox.

    Hice que se deshabiliten todos los controles (labels y picturebox) que están dentro del panel y queda todo con el mismo color pero no puedo cambiar el color del texto de los labels que están deshabilitados y si los habilito al pasar el cursor sobre esos controles me toma como que el cursor salió del panel.

    Básicamente, quiero que al pasar el cursor sobre cualquier de los controles, se cambie el color del fondo del panel.

    Saludos y gracias :D


    Skull

    viernes, 1 de mayo de 2020 16:48

Todas las respuestas

  • Hola Skull15101996, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.   

    Oystein Edwards 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

     

    viernes, 1 de mayo de 2020 17:34
    Moderador
  • Hola Skull

    La propiedad BackColor es la que indica el color de fondo de un control.

    Seguramente, si asignas el color de un control cuando el mouse entra (evento MouseEnter), también quieras volverlo a como estaba cuando el mouse sale (evento MouseLeave).

    Saludos

    Pablo

    viernes, 1 de mayo de 2020 22:55
  • Hola

    intenta con esto

    
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Panel panel = new Panel();
            panel.Name = "panel";
            panel.Dock = DockStyle.Fill;
            panel.BackColor = Color.Gray;
            panel.MouseLeave += MouseLeave;
            panel.MouseEnter += MouseEnter;
            Label label1 = new Label();
            label1.Location = new Point(10, 100);
            label1.Text = "Label 1";
            Label label2 = new Label();
            label1.MouseLeave += MouseLeave;
            label1.MouseEnter += MouseEnter;
            label2.Location = new Point(10, 200);
            label2.Text = "Label 2";
            label2.MouseLeave += MouseLeave;
            label2.MouseEnter += MouseEnter;
            PictureBox pictureBox = new PictureBox();
            pictureBox.Location = new Point(100, 100);
            pictureBox.Size = new Size(100, 100);
            pictureBox.MouseLeave += MouseLeave;
            pictureBox.MouseEnter += MouseEnter;
            panel.Controls.Add(label1);
            panel.Controls.Add(label2);
            panel.Controls.Add(pictureBox);
            Controls.Add(panel);
            cambio();
        }

        private void MouseEnter(object sender, EventArgs e)
        {
            cambio(true);
            if (sender is Panel)
            {
            }
            else
            {
                Controls["panel"].BackColor = Color.Yellow;
            }
        }

        private void MouseLeave(object sender, EventArgs e)
        {
            cambio();
            if (sender is Panel)
            {
            }
            else
            {
                Controls["panel"].BackColor = Color.Gray;
            }
        }

        private void cambio(bool Over = false)
        {
            foreach (var item in Controls["panel"].Controls)
            {
                if (item is Label)
                {
                    ((Label)item).BackColor = (Over) ? Color.Blue : Color.Red;
                }
                if (item is PictureBox)
                    ((PictureBox)item).BackColor = (Over) ? Color.Blue : Color.Red;
            }
        }
    }


    • Editado Marti Llam sábado, 2 de mayo de 2020 12:56
    sábado, 2 de mayo de 2020 12:42
  • Gracias. No lo hice tal cual pero me ayudó mucho a que funcione :)

    Skull

    viernes, 8 de mayo de 2020 1:00