Principales respuestas
WindowsForm RGB

Pregunta
-
Buenas:
Quiero como indica en la captura de abajo, cambiar de color del Panel1 con los trackBar añadidos.
No me funciona.
Códigos que he hecho hasta ahora.
using System.Drawing; using System.Windows.Forms; namespace Form_RGB_02 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void panel1_Paint(object sender, PaintEventArgs e) { panel1.BackColor = Color.FromArgb(trackBar_Rojo.Value, trackBar_Verde.Value, trackBar_Azul.Value); label_Rojo.Text = trackBar_Rojo.Value.ToString(); label_Verde.Text = trackBar_Verde.Value.ToString(); label_Azul.Text = trackBar_Azul.Value.ToString(); } } }
¿Alguna idea?Saludos.
Edito:
Ahora lo he hecho con Timer cada 100 ms.
private void timer1_Tick(object sender, EventArgs e) { panel1.BackColor = Color.FromArgb(trackBar_Rojo.Value, trackBar_Verde.Value, trackBar_Azul.Value); label_Rojo.Text = trackBar_Rojo.Value.ToString(); label_Verde.Text = trackBar_Verde.Value.ToString(); label_Azul.Text = trackBar_Azul.Value.ToString(); }
¿No hay otra manera de hacerlo sin usar Timer?Gracias.
http://electronica-pic.blogspot.com
- Editado Metaconta domingo, 21 de marzo de 2021 8:59
Respuestas
-
Puedes utilizar el evento ValueChanged del Trackbar. Si quieres, basta con que escribas un único manejador para el evento, y puedes conectar los tres trackbars al mismo manejador.
Dentro del manejador, podrías llamar a panel1.Invalidate() y eso dispararía el evento panel1_Paint que tenías en tu primer ejemplo de código.
Sin embargo, no recomiendo hacerlo así. No tiene sentido hacer lo que estás haciendo dentro del panel1_Paint, puesto que las instrucciones que contiene dentro no corresponden al Paint (no hacen nada con el e.Graphics). Es preferible que tomes esas líneas de código y las metas directamente en el ValueChanged del Trackbar.
- Marcado como respuesta Metaconta lunes, 22 de marzo de 2021 7:30
-
No se si lo que hice es lo más adecuado [...]
- Marcado como respuesta Metaconta lunes, 22 de marzo de 2021 7:30
Todas las respuestas
-
Puedes utilizar el evento ValueChanged del Trackbar. Si quieres, basta con que escribas un único manejador para el evento, y puedes conectar los tres trackbars al mismo manejador.
Dentro del manejador, podrías llamar a panel1.Invalidate() y eso dispararía el evento panel1_Paint que tenías en tu primer ejemplo de código.
Sin embargo, no recomiendo hacerlo así. No tiene sentido hacer lo que estás haciendo dentro del panel1_Paint, puesto que las instrucciones que contiene dentro no corresponden al Paint (no hacen nada con el e.Graphics). Es preferible que tomes esas líneas de código y las metas directamente en el ValueChanged del Trackbar.
- Marcado como respuesta Metaconta lunes, 22 de marzo de 2021 7:30
-
Buenas:
Me funciona de maravilla. No se si lo que hice es lo más adecuado, pero funciona.
using System; using System.Drawing; using System.Windows.Forms; namespace Form_RGB_02 { public partial class Form1 : Form { public Form1() { InitializeComponent(); Panel(); } private void trackBar_Rojo_ValueChanged(object sender, EventArgs e) { Panel(); label_Rojo.Text = trackBar_Rojo.Value.ToString(); } private void trackBar_Verde_ValueChanged(object sender, EventArgs e) { Panel(); label_Verde.Text = trackBar_Verde.Value.ToString(); } private void trackBar_Azul_ValueChanged(object sender, EventArgs e) { Panel(); label_Azul.Text = trackBar_Azul.Value.ToString(); } void Panel() { panel1.BackColor = Color.FromArgb(trackBar_Rojo.Value, trackBar_Verde.Value, trackBar_Azul.Value); } } }
Saludos.
http://electronica-pic.blogspot.com
- Editado Metaconta domingo, 21 de marzo de 2021 23:08
-
No se si lo que hice es lo más adecuado [...]
- Marcado como respuesta Metaconta lunes, 22 de marzo de 2021 7:30