J'ai un programme qui a des carrés rebondissants dans un formulaire, je dois également faire en sorte que toutes les 5 secondes les carrés tirés changent de couleur, j'ai un minuteur pour mettre à jour un listbox sur les coordonnées de chaque boîte et une seconde minuterie avec l'intervalle de 5000 pour changer la couleur du carré. Maintenant, je suis en train de comprendre exactement comment puis-je changer la couleur des carrés avec la minuterie, j'ai une méthode appelée colorchange
avec une propriété appelée rectcolor
C# comment changer la couleur du rectangle toutes les 5 secondes
private Color Rectcolor { get; set; }
}
public Color Colorchange()
{
Rectcolor = Color.FromArgb(randcolor.Next(256), randcolor.Next(256), randcolor.Next(256));
return Rectcolor;
}
dans Form1
j'ai l'événement tique timer2 avec un foreach en passant par les boîtes
public partial class Form1 : Form
{
Random Randcolor = Box.randcolor;
Random Rand = Box.rand;
List<Box> Boxes = new List<Box>();
public Form1()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
}
private void timer2_Tick(object sender, EventArgs e)
{
foreach (Box tmp in Boxes)
{
tmp.Colorchange();
}
}
quand je lance le programme, rien ne se passe avec les rectangles mobiles, comment je fais colorchange
réellement changer la couleur du rectangle?
boîte pleine Classe Code
class Box
{
protected Rectangle myRectangle;
protected int xStep;
protected int yStep;
protected Form pForm;
protected Label myLocation;
protected Color myColor;
public static Random rand = new Random();
public static Random randcolor = new Random();
public Box(int x, int y, int s, Form pF)
{
myColor = new Color();
myColor = Colorchange();
myLocation = new Label();
myLocation.BackColor = Color.Transparent;
myLocation.Left = x;
myLocation.Top = y;
myLocation.ForeColor = Colorchange();
pF.Controls.Add(myLocation);
pForm = pF;
myRectangle = new Rectangle(x, y, s, s);
myRectangle.X = x;
myRectangle.Y = y;
xStep = rand.Next(1, 15);
yStep = rand.Next(1, 15);
}
public int X { get { return myRectangle.X; } }
public int Y { get { return myRectangle.Y; } }
private int Width { get { return myRectangle.Width; } }
private int Height { get { return myRectangle.Height; } }
private Color Rectcolor { get; set; }
public void Move()
{
myRectangle.X += xStep;
myRectangle.Y += yStep;
if (myRectangle.X <= 0)
xStep *= -1;
if (myRectangle.X + myRectangle.Width >= pForm.ClientSize.Width)
xStep *= -1;
if (myRectangle.Y <= 0)
yStep *= -1;
if (myRectangle.Y + myRectangle.Height >= pForm.ClientSize.Height)
yStep *= -1;
//if (myRectangle.X >500)
// xStep *= -1;
}
public Color Colorchange()
{
Rectcolor = Color.FromArgb(randcolor.Next(256), randcolor.Next(256), randcolor.Next(256));
return Rectcolor;
}
public static bool Bounce(Box One, Box Two)
{
if (One.X + One.Width < Two.X)
return false;
if (Two.X + Two.Width < One.X)
return false;
if (One.Y + One.Height < Two.Y)
return false;
if (Two.Y + Two.Height < One.Y)
return false;
return true;
}
//public void collision()
//{
// xStep *= -1;
// yStep *= -1;
//}
public void Draw(Graphics g)
{
g.DrawRectangle(new Pen(Color.Blue), myRectangle);
myLocation.Top = myRectangle.Y -15;
myLocation.Left = myRectangle.X+(myRectangle.Width/4);
myLocation.Text = myRectangle.X.ToString() + ", " + myRectangle.Y.ToString();
}
i démarrer la minuterie sur le clic buttone, je vais vous donner FORM1
public partial class Form1 : Form
{
Random Randcolor = Box.randcolor;
Random Rand = Box.rand;
List<Box> Boxes = new List<Box>();
public Form1()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
}
private void button1_Click(object sender, EventArgs e)
{
// Box tmp = new Box(100, 100, 40);
// Boxes.Add(tmp);
for (int x = 1; x < 10; x++)
{
Boxes.Add(
new Box(
Rand.Next(100 + x * 10, this.ClientSize.Width - 100),
Rand.Next(100 + x * 10, this.ClientSize.Height - 100),
Rand.Next(100 + x * 15), this));
//Boxes.Add(new Box(100 + x * 10, 100 + x * 10, x * 15, this));
}
timer1.Enabled = true;
timer2.Enabled = true;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
foreach (Box tmp in Boxes)
{
tmp.Draw(e.Graphics);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
listBox1.Items.Clear();
foreach (Box tmp in Boxes)
{
tmp.Move();
listBox1.Items.Add(tmp.X + ", " + tmp.Y);
}
this.Invalidate(false);
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void timer2_Tick(object sender, EventArgs e)
{
foreach (Box tmp in Boxes)
{
tmp.Colorchange();
}
}
}
}
Veuillez indiquer le code de votre classe 'Box'. – oRole
il a été mis à jour – alvintron
Où commencez-vous les minuteries? – JMA