(http://social.msdn.microsoft.com/Forums/getfile/514748)
(http://social.msdn.microsoft.com/Forums/getfile/514750)
Hay dos objetivos que no me salen.
1) Cuando tengo algunos pictureBox activado, en esta caso solo uno. Quiero lograr de alguna manera que al pulsar "Color azul" las veces que quiera, no pierda los estados de los pictureBox que he marcado con el ratón pulsándolos. Si no entiendes lo que quiero decir sobre algo. Pregunta.
2) El botón "Invertir estados" lo que hace que los picturesBox activados y desactivados se inviertan, es decir, los que están activados se desactivan y los que están desactivados se activan.
El código fuente de lo que he hecho hasta ahora es esto:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Picture_Colores
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool Color_5x7 = true;
bool Color_p1_5x7 = false;
bool Color_p2_5x7 = false;
bool Color_p3_5x7 = false;
bool Color_p4_5x7 = false;
private void checkBox_Color_5x7_CheckedChanged(object sender, EventArgs e)
{
if (Color_5x7 == false)
{
groupBox1.BackColor = Color.LawnGreen;
groupBox1.ForeColor = Color.Black;
Color_5x7 = true;
}
else
{
groupBox1.BackColor = Color.RoyalBlue;
groupBox1.ForeColor = Color.White;
Color_5x7 = false;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Lime;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.Black;
Color_p1_5x7 = true;
}
}
else
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Blue;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.White;
Color_p1_5x7 = true;
}
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Lime;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.Black;
Color_p2_5x7 = true;
}
}
else
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Blue;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.White;
Color_p2_5x7 = true;
}
}
}
private void pictureBox3_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Lime;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.Black;
Color_p3_5x7 = true;
}
}
else
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Blue;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.White;
Color_p3_5x7 = true;
}
}
}
private void pictureBox4_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Lime;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.Black;
Color_p4_5x7 = true;
}
}
else
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Blue;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.White;
Color_p4_5x7 = true;
}
}
}
}
}
Un cordial saludo.
Para cambiar el color y que los estados permanezcan es necesario que evalúes el estado al presionar el checkbox y realices el cambio del color:
if (Color_5x7 == false)
{
groupBox1.BackColor = Color.LawnGreen;
groupBox1.ForeColor = Color.Black;
if(bool Color_p1_5x7 == false)
pictureBox1.BackColor = // Aquí el color para el estado desactivado.
else
pictureBox1.BackColor = // Aquí el color para el estado activado.
// Repetir el 'if' anterior para cada picturebox
Color_5x7 = true;
}
else
{
groupBox1.BackColor = Color.RoyalBlue;
groupBox1.ForeColor = Color.White;
if(bool Color_p1_5x7 == false)
pictureBox1.BackColor = // Aquí el color para el estado desactivado.
else
pictureBox1.BackColor = // Aquí el color para el estado activado.
// Repetir el 'if' anterior para cada picturebox
Color_5x7 = false;
}
Y para invertir los estados sería de una manera similar. Compruebas el estado de cada cuadro y cambias su valor, después inviertes el color.
if(bool Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = // Color para el estado activo.
}else{
Color_p1_5x7 = false;
pictureBox1.BackColor = // Color para el estado inactivo.
}
Y repites los if para cada picturebox.
Como sugerencia, para evitarte tanto código deberías cambiar las condiciones y trabajar con variables del tipo 'Color' y realizar la asignación mediante éstas. Saludos.
Hola:
Estándo en la primera parte he intentado hacer el código usando las {} para tenerlo como más ordenado. A lo mejor me he equivocado, no me sale elefecto esperado.
Solo he cambiado el código del pictureBox 1, el primero.
private void pictureBox1_Click(object sender, EventArgs e)
{
if (Color_5x7 == false)
{
groupBox1.BackColor = Color.LawnGreen;
groupBox1.ForeColor = Color.Black;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Lime;
}
else
{
pictureBox1.BackColor = Color.Black;
}
Color_5x7 = true;
}
else
{
groupBox1.BackColor = Color.RoyalBlue;
groupBox1.ForeColor = Color.White;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Blue;
}
else
{
pictureBox1.BackColor = Color.White;
}
Color_5x7 = false;
}
}
(http://www.subeimagenes.com/img/sin-titulo-1-1068100.gif)
Vuelvo a decirlo de otra manera, cuando el estado del checkBox, en este caso llamado "Color_azul" está desactivado, el fondo es verde. El cuadrado desactivado es verde de otro tono y el negro es activado.
Cuando se activa el checbox "Color_azul" sin que se pierda los valores marcados, la base es azul, la base me refiero el grgoupBox, el picture box azul más fuerte cuando está desactivado y se pone blanco cuando es activado.
Saludos.
Ah, es que el primer código que yo puse no va en los picturebox sino en el código del checkbox. Y el segundo código en el botón que invierte los estados.
Entendido. Ahora funciona un poco mejor, aún así tiene algo que no concuerda, algún fallo de despiste.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// http://social.msdn.microsoft.com/Forums/es-ES/6b834135-b0d1-4ec8-aa50-ba3316bfd5b5/conseguir-unos-objetivos-que-no-me-salen-con-c-2013?forum=vcses
// http://foro.elhacker.net/net/no_me_salen_algunas_cosas_con_c-t420178.0.html
// http://www.forosdelweb.com/f29/no-salen-algunas-cosas-con-c-1107200/
namespace Picture_Colores
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool Color_5x7 = true;
bool Color_p1_5x7 = false;
bool Color_p2_5x7 = false;
bool Color_p3_5x7 = false;
bool Color_p4_5x7 = false;
private void checkBox_Color_5x7_CheckedChanged(object sender, EventArgs e)
{
if (Color_5x7 == false)
{
groupBox1.BackColor = Color.LawnGreen;
groupBox1.ForeColor = Color.Black;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Lime;
}
else
{
pictureBox1.BackColor = Color.Black;
}
Color_5x7 = true;
}
else
{
groupBox1.BackColor = Color.RoyalBlue;
groupBox1.ForeColor = Color.White;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Blue;
}
else
{
pictureBox1.BackColor = Color.White;
}
Color_5x7 = false;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Lime;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.Black;
Color_p1_5x7 = true;
}
}
else
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Blue;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.White;
Color_p1_5x7 = true;
}
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Lime;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.Black;
Color_p2_5x7 = true;
}
}
else
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Blue;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.White;
Color_p2_5x7 = true;
}
}
}
private void pictureBox3_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Lime;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.Black;
Color_p3_5x7 = true;
}
}
else
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Blue;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.White;
Color_p3_5x7 = true;
}
}
}
private void pictureBox4_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Lime;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.Black;
Color_p4_5x7 = true;
}
}
else
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Blue;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.White;
Color_p4_5x7 = true;
}
}
}
}
}
Me funciona en el pictureBox1, el pictureBox2 no hace el cambio en el checbox "Color azul".
Saludo.
Eso es porque no has escrito el código par los demás picturebox. Si te fijas en la primer respuesta que te dejé (en los comentarios escribí dentro del código) había instrucciones del código que debías escribir ahí. Sólo tienes que repetir el 'if' que hace el cambio en el picturebox1, pero ahora para cada uno de los demás picturebox.
Buenas:
Funciona mejor pero hay peros. Tiene comportamientos no deseados.
Si cambios todos a 1 desde el chekbox, lo pulso varias veces repetidas, luego pulso uno a uno a los pictureBox, se comporta de modo raro.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Picture_Colores
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool Color_5x7 = true;
bool Color_p1_5x7 = false;
bool Color_p2_5x7 = false;
bool Color_p3_5x7 = false;
bool Color_p4_5x7 = false;
private void checkBox_Color_5x7_CheckedChanged(object sender, EventArgs e)
{
if (Color_5x7 == false)
{
groupBox1.BackColor = Color.LawnGreen;
groupBox1.ForeColor = Color.Black;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Lime;
pictureBox2.BackColor = Color.Lime;
pictureBox3.BackColor = Color.Lime;
pictureBox4.BackColor = Color.Lime;
}
else
{
pictureBox1.BackColor = Color.Black;
pictureBox2.BackColor = Color.Black;
pictureBox3.BackColor = Color.Black;
pictureBox4.BackColor = Color.Black;
}
Color_5x7 = true;
}
else
{
groupBox1.BackColor = Color.RoyalBlue;
groupBox1.ForeColor = Color.White;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Blue;
pictureBox2.BackColor = Color.Blue;
pictureBox3.BackColor = Color.Blue;
pictureBox4.BackColor = Color.Blue;
}
else
{
pictureBox1.BackColor = Color.White;
pictureBox2.BackColor = Color.White;
pictureBox3.BackColor = Color.White;
pictureBox4.BackColor = Color.White;
}
Color_5x7 = false;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Lime;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.Black;
Color_p1_5x7 = true;
}
}
else
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Blue;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.White;
Color_p1_5x7 = true;
}
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Lime;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.Black;
Color_p2_5x7 = true;
}
}
else
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Blue;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.White;
Color_p2_5x7 = true;
}
}
}
private void pictureBox3_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Lime;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.Black;
Color_p3_5x7 = true;
}
}
else
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Blue;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.White;
Color_p3_5x7 = true;
}
}
}
private void pictureBox4_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Lime;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.Black;
Color_p4_5x7 = true;
}
}
else
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Blue;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.White;
Color_p4_5x7 = true;
}
}
}
}
}
Saludo.
Mmmmmmm, no. Definitivamente no me refería a eso sino ha esto:
if (Color_5x7 == false)
{
groupBox1.BackColor = Color.LawnGreen;
groupBox1.ForeColor = Color.Black;
if(bool Color_p1_5x7 == false)
pictureBox1.BackColor = // Aquí el color para el estado desactivado.
else
pictureBox1.BackColor = // Aquí el color para el estado activado.
// Repetir el 'if' anterior para cada picturebox
// *********** OJO ******************
// *********** Repetir toda la condición if **************
if(bool Color_p2_5x7 == false)
pictureBox2.BackColor = // Aquí el color para el estado desactivado.
else
pictureBox2.BackColor = // Aquí el color para el estado activado.
Color_5x7 = true;
}
else
{
groupBox1.BackColor = Color.RoyalBlue;
groupBox1.ForeColor = Color.White;
if(bool Color_p1_5x7 == false)
pictureBox1.BackColor = // Aquí el color para el estado desactivado.
else
pictureBox1.BackColor = // Aquí el color para el estado activado.
// Repetir el 'if' anterior para cada picturebox
// *********** OJO ******************
// *********** Repetir toda la condición if **************
if(bool Color_p2_5x7 == false)
pictureBox2.BackColor = // Aquí el color para el estado desactivado.
else
pictureBox2.BackColor = // Aquí el color para el estado activado.
Color_5x7 = false;
}
El código es del checkbox.
Ahora sí has lo mismo que hice en el código anterior, donde a cada picturebox le corresponde un if Fíjate como en el ejemplo todavía me faltan dos picturebox por comprobar. Espero que ya con eso no te de problemas. Saludos.
Ahora si funciona. Por fiiiiiiiiiiiinnnnnnnnnnn. ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Picture_Colores
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool Color_5x7 = true;
bool Color_p1_5x7 = false;
bool Color_p2_5x7 = false;
bool Color_p3_5x7 = false;
bool Color_p4_5x7 = false;
private void checkBox_Color_5x7_CheckedChanged(object sender, EventArgs e)
{
if (Color_5x7 == false)
{
groupBox1.BackColor = Color.LawnGreen;
groupBox1.ForeColor = Color.Black;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Lime;
}
else
{
pictureBox1.BackColor = Color.Black;
}
if (Color_p2_5x7 == false)
{
pictureBox2.BackColor = Color.Lime;
}
else
{
pictureBox2.BackColor = Color.Black;
}
if (Color_p3_5x7 == false)
{
pictureBox3.BackColor = Color.Lime;
}
else
{
pictureBox3.BackColor = Color.Black;
}
if (Color_p4_5x7 == false)
{
pictureBox4.BackColor = Color.Lime;
}
else
{
pictureBox4.BackColor = Color.Black;
}
Color_5x7 = true;
}
else
{
groupBox1.BackColor = Color.RoyalBlue;
groupBox1.ForeColor = Color.White;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Blue;
}
else
{
pictureBox1.BackColor = Color.White;
}
if (Color_p2_5x7 == false)
{
pictureBox2.BackColor = Color.Blue;
}
else
{
pictureBox2.BackColor = Color.White;
}
if (Color_p3_5x7 == false)
{
pictureBox3.BackColor = Color.Blue;
}
else
{
pictureBox3.BackColor = Color.White;
}
if (Color_p4_5x7 == false)
{
pictureBox4.BackColor = Color.Blue;
}
else
{
pictureBox4.BackColor = Color.White;
}
Color_5x7 = false;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Lime;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.Black;
Color_p1_5x7 = true;
}
}
else
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Blue;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.White;
Color_p1_5x7 = true;
}
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Lime;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.Black;
Color_p2_5x7 = true;
}
}
else
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Blue;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.White;
Color_p2_5x7 = true;
}
}
}
private void pictureBox3_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Lime;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.Black;
Color_p3_5x7 = true;
}
}
else
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Blue;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.White;
Color_p3_5x7 = true;
}
}
}
private void pictureBox4_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Lime;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.Black;
Color_p4_5x7 = true;
}
}
else
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Blue;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.White;
Color_p4_5x7 = true;
}
}
}
}
}
Ahora queda pulir el botón "Invertir".
Antes de seguir, horas y horas, con dolores en los ojos por mirar tanto el monitor y falta de sueño. Prefiero dejar el código justo abajo del botón Invertir.
private void button_Invertir_Click(object sender, EventArgs e)
{
if (Color_5x7 == false)
{
if (Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = Color.Lime;
}
else
{
Color_p1_5x7 = false;
pictureBox1.BackColor = Color.Black;
}
if (Color_p2_5x7 == false)
{
Color_p2_5x7 = true;
pictureBox2.BackColor = Color.Lime;
}
else
{
Color_p2_5x7 = false;
pictureBox2.BackColor = Color.Black;
}
if (Color_p3_5x7 == false)
{
Color_p3_5x7 = true;
pictureBox3.BackColor = Color.Lime;
}
else
{
Color_p3_5x7 = false;
pictureBox3.BackColor = Color.Black;
}
if (Color_p4_5x7 == false)
{
Color_p4_5x7 = true;
pictureBox4.BackColor = Color.Lime;
}
else
{
Color_p4_5x7 = false;
pictureBox4.BackColor = Color.Black;
}
Color_5x7 = true;
}
else
{
if (Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = Color.Blue;
}
else
{
Color_p1_5x7 = false;
pictureBox1.BackColor = Color.White;
}
if (Color_p2_5x7 == false)
{
Color_p2_5x7 = true;
pictureBox2.BackColor = Color.Blue;
}
else
{
Color_p2_5x7 = false;
pictureBox2.BackColor = Color.White;
}
if (Color_p3_5x7 == false)
{
Color_p3_5x7 = true;
pictureBox3.BackColor = Color.Blue;
}
else
{
Color_p3_5x7 = false;
pictureBox3.BackColor = Color.White;
}
if (Color_p4_5x7 == false)
{
Color_p4_5x7 = true;
pictureBox4.BackColor = Color.Blue;
}
else
{
Color_p4_5x7 = false;
pictureBox4.BackColor = Color.White;
}
Color_5x7 = false;
}
}
En cuanto al paso 1) ya está completado y me falta el paso 2). El botón Invertir no se comporta como debería, hace cosas raras.
Muchísimas gracias por la ayuda.
Por nada, para eso estamos aquí. Con exactitud ¿qué es lo que hace el botón y que no debería hacer? Espero que además de explicar puedas poner imágenes.
Buenas:
Desde que ejecute el programa o aplicación, funciona bien, puedo cambiar los colores de los picturesBox y el checboc "color azul" sin problemas.
(http://www.subeimagenes.com/img/color-1070345.gif)
El problema viene cuando pulse el botón "Invertir" como indica l aimagen de abajo. Dejo el checbox sin tocar, solo pulso el botón "Invertir" y ocurrre lo de abajo. Nunca tiene que ponerse los pictureBox azul o blanco, eso es para cuando pulse el checbox.
(http://www.subeimagenes.com/img/color-1070368.gif)
Lo que debe ocurrir y sin pulsar el checkBox es:
Si está verde el fondo. Al pulsar los pictureBox, al menos uno se ponga negro, activado. Desde que pulse el botón "Invertir" haga el efecto contrario, es decir, invierte los colores, los negros por los verdes y al revés.
(http://www.subeimagenes.com/img/color-1070373.gif)
Cuando pulse el checbox, sin que pierda los estados activado y desactivado, lo refleje con su color correspondiente.
Saludo.
Ohhhh sí, creo ya tengo la solución y es más sencilla de lo que crees. Elimina las líneas:
Color_5x7 = true;
Y:
Color_5x7 = false;
Porque esas líneas lo que hacen es cambiar el color, como si hubieses presionado el checkbox.
Buenas:
Lo he quitado, da problemas.
Luego cambie de false a true el primer if (Color_5x7 == true)
También tiene cosas raras. Si quieres te paso el código fuente completo.
Saludo.
No es necesario, porque en realidad el problema está sólo en esa parte del código. En todo caso, confirma que tu código esté como lo dejo a continuación, porque no le veo el problema.
private void button_Invertir_Click(object sender, EventArgs e)
{
if (Color_5x7 == false)
{
if (Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = Color.Lime;
}
else
{
Color_p1_5x7 = false;
pictureBox1.BackColor = Color.Black;
}
if (Color_p2_5x7 == false)
{
Color_p2_5x7 = true;
pictureBox2.BackColor = Color.Lime;
}
else
{
Color_p2_5x7 = false;
pictureBox2.BackColor = Color.Black;
}
if (Color_p3_5x7 == false)
{
Color_p3_5x7 = true;
pictureBox3.BackColor = Color.Lime;
}
else
{
Color_p3_5x7 = false;
pictureBox3.BackColor = Color.Black;
}
if (Color_p4_5x7 == false)
{
Color_p4_5x7 = true;
pictureBox4.BackColor = Color.Lime;
}
else
{
Color_p4_5x7 = false;
pictureBox4.BackColor = Color.Black;
}
}
else
{
if (Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = Color.Blue;
}
else
{
Color_p1_5x7 = false;
pictureBox1.BackColor = Color.White;
}
if (Color_p2_5x7 == false)
{
Color_p2_5x7 = true;
pictureBox2.BackColor = Color.Blue;
}
else
{
Color_p2_5x7 = false;
pictureBox2.BackColor = Color.White;
}
if (Color_p3_5x7 == false)
{
Color_p3_5x7 = true;
pictureBox3.BackColor = Color.Blue;
}
else
{
Color_p3_5x7 = false;
pictureBox3.BackColor = Color.White;
}
if (Color_p4_5x7 == false)
{
Color_p4_5x7 = true;
pictureBox4.BackColor = Color.Blue;
}
else
{
Color_p4_5x7 = false;
pictureBox4.BackColor = Color.White;
}
}
}
Si todavía te sigue dando problemas y no encuentras la solución, sube el proyecto completo a algún sitio para compartir archivos y me pasas el enlace.
Se cambia el color del groupBox y no debería.
¿Al presionar el botón te cambia el groupbox? Yo creo que sí vas a tener que mandarme el proyecto completo para encontrar el problema, porque si te fijas en esa parte del código en ningúnmomento estamos trabajando con con el groupbox. Pero lo revisaría hasta mañana. :/
O si quieres puedes buscar todas las referencias al groupbox en el código y ver cuál de todas es la que te genera el problema. Saludos. :)
Te respondí en privado.
Ya modifiqué tu código y a mí me funciona perfectamente. :) De hecho, antes de compilar prueba lanzando el ejecutable que dejé en el directorio bin/debug.
Buenas:
No funciona, haceeste tipo de cosas cuando pulsas Invertir y checBox.
(http://www.subeimagenes.com/img/csharp-1071583.gif)
Recordar que el color de fondo o del groupBox no debe estar el verde con el azul y al revés.
Saludo.
A mí me funciona la aplicación a la perfección. Te escribo el código completo del formulario para lo pegues completo y no escribas nada a mano.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// http://social.msdn.microsoft.com/Forums/es-ES/6b834135-b0d1-4ec8-aa50-ba3316bfd5b5/conseguir-unos-objetivos-que-no-me-salen-con-c-2013?forum=vcses
// http://foro.elhacker.net/net/no_me_salen_algunas_cosas_con_c-t420178.0.html
// http://www.forosdelweb.com/f29/no-salen-algunas-cosas-con-c-1107200/
namespace Picture_Colores
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool Color_5x7 = true;
bool Color_p1_5x7 = false;
bool Color_p2_5x7 = false;
bool Color_p3_5x7 = false;
bool Color_p4_5x7 = false;
private void checkBox_Color_5x7_CheckedChanged(object sender, EventArgs e)
{
if (Color_5x7 == false)
{
groupBox1.BackColor = Color.LawnGreen;
groupBox1.ForeColor = Color.Black;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Lime;
}
else
{
pictureBox1.BackColor = Color.Black;
}
if (Color_p2_5x7 == false)
{
pictureBox2.BackColor = Color.Lime;
}
else
{
pictureBox2.BackColor = Color.Black;
}
if (Color_p3_5x7 == false)
{
pictureBox3.BackColor = Color.Lime;
}
else
{
pictureBox3.BackColor = Color.Black;
}
if (Color_p4_5x7 == false)
{
pictureBox4.BackColor = Color.Lime;
}
else
{
pictureBox4.BackColor = Color.Black;
}
Color_5x7 = true;
}
else
{
groupBox1.BackColor = Color.RoyalBlue;
groupBox1.ForeColor = Color.White;
if (Color_p1_5x7 == false)
{
pictureBox1.BackColor = Color.Blue;
}
else
{
pictureBox1.BackColor = Color.White;
}
if (Color_p2_5x7 == false)
{
pictureBox2.BackColor = Color.Blue;
}
else
{
pictureBox2.BackColor = Color.White;
}
if (Color_p3_5x7 == false)
{
pictureBox3.BackColor = Color.Blue;
}
else
{
pictureBox3.BackColor = Color.White;
}
if (Color_p4_5x7 == false)
{
pictureBox4.BackColor = Color.Blue;
}
else
{
pictureBox4.BackColor = Color.White;
}
Color_5x7 = false;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Lime;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.Black;
Color_p1_5x7 = true;
}
}
else
{
if (Color_p1_5x7 == true)
{
pictureBox1.BackColor = Color.Blue;
Color_p1_5x7 = false;
}
else
{
pictureBox1.BackColor = Color.White;
Color_p1_5x7 = true;
}
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Lime;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.Black;
Color_p2_5x7 = true;
}
}
else
{
if (Color_p2_5x7 == true)
{
pictureBox2.BackColor = Color.Blue;
Color_p2_5x7 = false;
}
else
{
pictureBox2.BackColor = Color.White;
Color_p2_5x7 = true;
}
}
}
private void pictureBox3_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Lime;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.Black;
Color_p3_5x7 = true;
}
}
else
{
if (Color_p3_5x7 == true)
{
pictureBox3.BackColor = Color.Blue;
Color_p3_5x7 = false;
}
else
{
pictureBox3.BackColor = Color.White;
Color_p3_5x7 = true;
}
}
}
private void pictureBox4_Click(object sender, EventArgs e)
{
if (checkBox_Color_5x7.Checked == false)
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Lime;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.Black;
Color_p4_5x7 = true;
}
}
else
{
if (Color_p4_5x7 == true)
{
pictureBox4.BackColor = Color.Blue;
Color_p4_5x7 = false;
}
else
{
pictureBox4.BackColor = Color.White;
Color_p4_5x7 = true;
}
}
}
private void button_Invertir_Click(object sender, EventArgs e)
{
if (Color_5x7 == true)
{
if (Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = Color.Black;
}
else
{
Color_p1_5x7 = false;
pictureBox1.BackColor = Color.Lime;
}
if (Color_p2_5x7 == false)
{
Color_p2_5x7 = true;
pictureBox2.BackColor = Color.Black;
}
else
{
Color_p2_5x7 = false;
pictureBox2.BackColor = Color.Lime;
}
if (Color_p3_5x7 == false)
{
Color_p3_5x7 = true;
pictureBox3.BackColor = Color.Black;
}
else
{
Color_p3_5x7 = false;
pictureBox3.BackColor = Color.Lime;
}
if (Color_p4_5x7 == false)
{
Color_p4_5x7 = true;
pictureBox4.BackColor = Color.Black;
}
else
{
Color_p4_5x7 = false;
pictureBox4.BackColor = Color.Lime;
}
}
else
{
if (Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = Color.White;
}
else
{
Color_p1_5x7 = false;
pictureBox1.BackColor = Color.Blue;
}
if (Color_p2_5x7 == false)
{
Color_p2_5x7 = true;
pictureBox2.BackColor = Color.White;
}
else
{
Color_p2_5x7 = false;
pictureBox2.BackColor = Color.Blue;
}
if (Color_p3_5x7 == false)
{
Color_p3_5x7 = true;
pictureBox3.BackColor = Color.White;
}
else
{
Color_p3_5x7 = false;
pictureBox3.BackColor = Color.Blue;
}
if (Color_p4_5x7 == false)
{
Color_p4_5x7 = true;
pictureBox4.BackColor = Color.White;
}
else
{
Color_p4_5x7 = false;
pictureBox4.BackColor = Color.Blue;
}
}
}
}
}
Si eso no funciona entonces no sé que estés haciendo mal porque yo ya corrí la aplicación y funciona de maravilla. :/ Un saludo y mucha suerte.
Buenas:
Ahora funciona tal como lo quiero.
¿Qué es lo que has hecho exactamente?
Muchísimas gracias.
Lo que te mencionaba sobre cambiar los colores en la asignación. Es decir cambiar la parte por ejemplo de:
if (Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = Color.White;
}
else
{
Color_p1_5x7 = false;
pictureBox1.BackColor = Color.Blue;
}
Por:
if (Color_p1_5x7 == false)
{
Color_p1_5x7 = true;
pictureBox1.BackColor = Color.Blue;
}
else
{
Color_p1_5x7 = false;
pictureBox1.BackColor = Color.White;
}
Y creo que la parte del if (Color_5x7 == true) antes estaba en 'false'.
Eso fue todo, que bueno que ya te funciona. Saludos :)
Si,a ntes if (Color_5x7 == true) estaba en false. Estaba probando tantas cosas que ni m di cuenta.
me meto solo para ayudar a reducir el codigo
if (Color_p1_5x7)
{
pictureBox1.BackColor = Color.White;
}
else
{
pictureBox1.BackColor = Color.Blue;
}
Color_p1_5x7 = !Color_p1_5x7;
y no se si soporta la sintaxis "?" de c/c++ (no se nada de c# :P)
pero en ese caso
pictureBox1.BackColor = Color_p1_5x7 ? Color.White : Color.Blue;
Color_p1_5x7 = !Color_p1_5x7;
tambien recomendaría esos colores meterlos como un array y en lugar de alargar tanto el código se usa for
sorry si mi conocimiento no sirve aquí :P
Claro que sirve. El conocimiento siempre es bienvenido. De hecho ya le hice las recomendaciones para reducir el código. De hecho le había comentado que se pueden eliminar la mayoría de los 'if' si se utilizan dos variables para los colores y se asigna el valor según el estado del checkbox.
Buenas de nuevo:
Ahora que por ahora está bien, he añadido dos botones más. Rellenar y Limpiar. Lo que hace es rellenar de golpe todos los pictureBox, y limpiar vaciar todos los pictureBox. Su código va en lo último del principal.
private void button_Rellenar_Click(object sender, EventArgs e)
{
if (Color_5x7 == true)
{
Rellenar_negro();
}
else
{
Rellenar_blanco();
}
}
private void button_Limpiar_Click(object sender, EventArgs e)
{
if (Color_5x7 == true)
{
Rellenar_verde();
}
else
{
Rellenar_azul();
}
}
public void Rellenar_blanco()
{
pictureBox1.BackColor = Color.White;
pictureBox2.BackColor = Color.White;
pictureBox3.BackColor = Color.White;
pictureBox4.BackColor = Color.White;
}
public void Rellenar_azul()
{
pictureBox1.BackColor = Color.Blue;
pictureBox2.BackColor = Color.Blue;
pictureBox3.BackColor = Color.Blue;
pictureBox4.BackColor = Color.Blue;
}
public void Rellenar_negro()
{
pictureBox1.BackColor = Color.Black;
pictureBox2.BackColor = Color.Black;
pictureBox3.BackColor = Color.Black;
pictureBox4.BackColor = Color.Black;
}
public void Rellenar_verde()
{
pictureBox1.BackColor = Color.Lime;
pictureBox2.BackColor = Color.Lime;
pictureBox3.BackColor = Color.Lime;
pictureBox4.BackColor = Color.Lime;
}
Los botones de entrada funciona muy bien, exceptuando que al pulsar Invertir hace cosas raras. Hagan pruebas y lo notarán. Quiero corregir esa parte pero no lo consigo.
Un saludo.
Eso es porque sólo modificas el color del fondo pero no haces nada con las variables de estado.
bool Color_p1_5x7 = false;
bool Color_p2_5x7 = false;
bool Color_p3_5x7 = false;
bool Color_p4_5x7 = false;
Esas variables también debes modificarlas (ponerlas todas a true o false según corresponda).
Hola:
Lo hice así pero no me cuadra. ;)
private void button_Rellenar_Click(object sender, EventArgs e)
{
if (Color_5x7 == true)
{
Rellenar_negro();
}
else
{
Rellenar_blanco();
}
}
private void button_Limpiar_Click(object sender, EventArgs e)
{
if (Color_5x7 == true)
{
Rellenar_verde();
}
else
{
Rellenar_azul();
}
}
public void Rellenar_blanco()
{
Color_p1_5x7 = false;
Color_p2_5x7 = false;
Color_p3_5x7 = false;
Color_p4_5x7 = false;
pictureBox1.BackColor = Color.White;
pictureBox2.BackColor = Color.White;
pictureBox3.BackColor = Color.White;
pictureBox4.BackColor = Color.White;
}
public void Rellenar_azul()
{
Color_p1_5x7 = true;
Color_p2_5x7 = true;
Color_p3_5x7 = true;
Color_p4_5x7 = true;
pictureBox1.BackColor = Color.Blue;
pictureBox2.BackColor = Color.Blue;
pictureBox3.BackColor = Color.Blue;
pictureBox4.BackColor = Color.Blue;
}
public void Rellenar_negro()
{
Color_p1_5x7 = false;
Color_p2_5x7 = false;
Color_p3_5x7 = false;
Color_p4_5x7 = false;
pictureBox1.BackColor = Color.Black;
pictureBox2.BackColor = Color.Black;
pictureBox3.BackColor = Color.Black;
pictureBox4.BackColor = Color.Black;
}
public void Rellenar_verde()
{
Color_p1_5x7 = true;
Color_p2_5x7 = true;
Color_p3_5x7 = true;
Color_p4_5x7 = true;
pictureBox1.BackColor = Color.Lime;
pictureBox2.BackColor = Color.Lime;
pictureBox3.BackColor = Color.Lime;
pictureBox4.BackColor = Color.Lime;
}
Un saludo.
Ya lo hice funcionar, gracias.
Cambié los true por los false y al revés.
Sí, exactamente así.