Помогите пожалуйста!!! Данный кусок программы должен нарисовать рандомный круг при появлении нового checkBox. Но выполняется только один вход в событие Paint, следовательно рисуется только один круг.
И есть еще один вопросик. Когда в конце numericUpDown1_ValueChanged я писала this.Invalidate рисовалось необходимое количество кругов, но только в разных пространствах) Объясните пожалуйста почему так происходит!!!
public partial class Form1 : Form
{
int A;
int wBoxA;
int chA = 0;
bool prA = false;
int oldA = 0;
List<FIGUR> oval = new List<FIGUR>();
List<CheckBox> cheke = new List<CheckBox>();
public Bitmap bmp;
public Form1()
{
InitializeComponent();
A = Convert.ToInt32(numericUpDown1.Value);
wBoxA = 67;
bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
RefreshBitmap(oval);
this.Paint += Form1_Paint;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
int newA = Convert.ToInt32(numericUpDown1.Value);
if (A < newA)
{
for (int i = A; i < newA; i++)
{
CheckBox boxik = new CheckBox();
boxik.Size = new Size(10, 10);
boxik.Location = new Point(wBoxA, 15);
boxik.Name = "A"+(i).ToString();
boxik.CheckState = CheckState.Checked;
this.Controls.Add(boxik);
wBoxA += 14;
}
oldA = A;
A = newA;
prA = true;
}
else if (A>newA)
{
for (int i = A; i > newA; i--)
{
this.Controls.RemoveByKey("A" + (i-1).ToString());
wBoxA -= 14;
}
A = newA;
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (prA)
{
Random rnd = new Random(DateTime.Now.Millisecond);
for (int i = oldA; i < A; i++)
{
SolidBrush bru = new SolidBrush(Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)));
FIGUR o = new RECTANGLE(rnd.Next(250), rnd.Next(250), rnd.Next(150), rnd.Next(150), new GraphicsPath(), bru);
oval.Add(o);
}
prA = false;
RefreshBitmap(oval);
e.Graphics.DrawImage(bmp, 0, 0);
}
}
void RefreshBitmap(List<FIGUR> tipFig)
{
if (bmp != null)
{
bmp.Dispose();
}
bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
using(Graphics g = Graphics.FromImage(bmp))
{
foreach (FIGUR fig in tipFig)
{
fig.draw(g);
}
}
}
}
А ниже кусок класса который рисует
class RECTANGLE : FIGUR
{
GraphicsPath path;
Pen pen;
Brush brush;
public RECTANGLE(float ax, float ay, float aw, float ah, GraphicsPath apath, Brush abrush) : base(ax, ay, aw, ah)
{
path = apath;
brush = abrush;
}
public override void draw(Graphics ag)
{
path.AddEllipse(x, y, w, h);//добавляет овал в прямоугольнике
ag.FillPath(brush, path);
}