请教 C# 高手 关于 画图 刷新 的问题

我用C#画图,为避免画好的图形消失,我的方案是,不停地重画,并不断刷新(Refresh)。这样的后果是,屏幕闪动太厉害。后来看到可以用OnPaint,就不用老是刷新了,但... 我用C#画图,为避免画好的图形消失,我的方案是,不停地重画,并不断刷新(Refresh)。这样的后果是,屏幕闪动太厉害。
后来看到可以用OnPaint,就不用老是刷新了,但机动性太差,我是想要一定的动画效果。
我要做的效果大约是这样的:先在Form中画好围棋棋盘(这个可以放到OnPaint里),然后从第一行开始,挨个对棋盘空格进行颜色填充,每秒填充一个空,最终全部填满,注意不要每填一个格都是将先前填好的重画,最好不要总是刷新。
请高手指点方案(当然也可以灵活运用OnPaint)。
谢谢!
我原先做法的意思是是画完第一个格,画第二个格的时候,第一个格还得画一遍:
第一次,画1格,刷新
第二次,画1、2格,刷新
第三次,画1、2、3格,刷新
。。。。。
这样总是重画,闪烁很厉害,我希望这样:
第一次,画1格
第二次,画2格
第三次,画3格
。。。。。。
并且前面画好的不丢失,且不要老是刷新
展开
 我来答
dkxpsg
2010-03-24 · TA获得超过1627个赞
知道小有建树答主
回答量:592
采纳率:0%
帮助的人:1035万
展开全部
不要直接在窗体上绘制,这样效果不好,最好是绘制在PictureBox上,尽量较少绘制次数闪烁效果会好很多,代码如下 10*10个格 100毫秒的速度 无闪烁

PictureBox pictureBox;
Rectangle rect = new Rectangle(0, 0, 30, 30);
Bitmap bit = new Bitmap(300, 300);
int recs = 1;
private void button1_Click(object sender, EventArgs e)
{
pictureBox = new PictureBox();
pictureBox.Size = new Size(320,320);
pictureBox.Location = new Point(30,30);
this.Controls.Add(pictureBox);
pictureBox.Paint += new PaintEventHandler(pictureBox_Paint);
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 100;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void pictureBox_Paint(object sender, PaintEventArgs e)
{
for (int i = 0; i <= 10; i++)
{
e.Graphics.DrawLine(Pens.Black, 0, i * 30, 300, i * 30);
e.Graphics.DrawLine(Pens.Black, i * 30, 0, i * 30, 300);
}
e.Graphics.DrawImage(bit, 0, 0);
}
void timer_Tick(object sender, EventArgs e)
{
DrawImage();
pictureBox.Invalidate();
recs++;
}
void DrawImage()
{
Graphics g = Graphics.FromImage(bit);
g.Clear(Color.Transparent);
rect = new Rectangle(0, 0, 30, 30);
for (int i = 0; i < recs; i++)
{
g.FillRectangle(Brushes.Black, rect);

if (i % 10 == 0 && i != 0)
{
rect.Y += 30;
rect.X = 0;
}
else
rect.X = i % 10 * 30;
}
g.Dispose();
}
西三227
2010-03-24 · TA获得超过1168个赞
知道小有建树答主
回答量:473
采纳率:0%
帮助的人:338万
展开全部
"注意不要每填一个格都是将先前填好的重画,最好不要总是刷新"关于这个问题很容易解决。使用重绘的标准方法Control.Invalidate(Region)而不是用Control.Invalidate(),因为第二个会导致整个画面重绘,第一个只会重绘你定义的region(既是每一个空格)

我上面的做法就是可以做到 第一次,画1格
第二次,画2格
第三次,画3格
你体会一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6eed2f8
2010-03-24 · TA获得超过5082个赞
知道大有可为答主
回答量:3423
采纳率:0%
帮助的人:3767万
展开全部
其实重画很快的,应该不会出现你说的闪烁很厉害的情况,可以参考一下我空间里的几个例子,应该和你的差不多
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式