class MyCircle
{
int x; int y; int r;
public MyCircle(int x, int y, int r) { this.x = x; this.y = y; this.r = r; }
public override void Draw(Graphics g)
{
Random rd = new Random();
int red, blue, green;
red = rd.Next(255);
blue = rd.Next(255);
green = rd.Next(255);
Pen pen = new Pen(Color.FromArgb(red, blue, green), 2);
g.DrawEllipse(pen, x, y, r, r);
}
private void button1_Click(object sender, EventArgs e)
{
for (int s = 30; s <= 600; s++)
{
shapes = new MyCircle(x, s, r);
shapes.Draw(g);
System.Threading.Thread.Sleep(10);
在这里重绘~~
}
}
你的代码逻辑不对,你应该让Paint事件去画,而不是在Button里画,道理很简单,即便你在按钮事件中画了,如果窗体被遮挡、最小化等等,画上去的东西就没有了。
MyCircle是一个控件还是一个窗体?
那你重写的是哪里的Draw呢
namespace 项目训练1_几何世界_
{
public partial class Form1 : Form
{
bool drawing;
public Form1()
{
InitializeComponent();
this.WindowState = FormWindowState.Maximized;
drawing = false;
}
private void button1_Click(object sender, EventArgs e)
{
if (drawing) { timer1.Stop(); drawing = false; }
else { timer1.Start(); drawing = true; }
}
private void timer1_Tick(object sender, EventArgs e)
{
MyShapes shapes = new MyShapes();
Graphics g =pictureBox1.CreateGraphics();
int x, y, r; int i, j, k,h;
Random rd = new Random();
x = rd.Next(1200);
y = rd.Next(100,300);
r = rd.Next(200);
i = rd.Next(40, 80);
j = rd.Next(20, 60);
k = rd.Next(20, 40);
h = rd.Next(20);
int type;
type = rd.Next(5);
if (type == 0)
{
for (int s = 30; s <= 600; s++)
{
shapes = new MyCircle(x, s, r);
shapes.Draw(g);
System.Threading.Thread.Sleep(10);
// Pen pen = new Pen(Color.White,2);
//g.TranslateTransform(200, 500);
//g.Clear(BackColor);
}
}
if (type == 1)
{
shapes = new MyRectangle(x, 100, 40+ rd.Next(200), 40 + rd.Next(200));
shapes.Draw(g);
}
if (type == 2)
{
shapes = new MyTri(x, 150, x + rd.Next(50,100), y -50- rd.Next(50,100), x+50 + rd.Next(50,100), y -rd.Next(60,100));
shapes.Draw(g);
}
if (type == 3)
{
shapes = new MySineWave(x,y,x+rd.Next(40),y+rd.Next(40));
shapes.Draw(g);
}
if (type == 4)
{
shapes = new MyTrapezoid(60 + x, y-2*k, 60 + x + i, y-2*k, 60+i+x +2*j, y-k, x -j-h, y-k);
shapes.Draw(g);
}
}
private void button2_Click(object sender, EventArgs e)
{
Graphics g = pictureBox1.CreateGraphics();
g.Clear(BackColor);
}
}
}
for (int i = 0; i < 10; i++)
{
f.Add(a.get(i * 3));
f.Add(a.get(i * 3 + 1));
f.Add(a.get(i * 3 + 2));
f.Add(b.get(i * 2));
f.Add(b.get(i * 2 + 1));
f.Add(c.get(i));
}