我需要在Windows窗体应用程序中移动图片。
这有效,但速度非常慢。有没有办法更快地移动图片?我想这样做是因为我希望达到“Flyin”效果。
// First try
for (int i = 0; i < 500; i++)
{
//Tempbox is a picturebox
this.Tempbox.Location = new Point(this.Tempbox.Left++, 0);
Application.DoEvents();
System.Threading.Thread.Sleep(50);
}
// Second try
using (Graphics g = Graphics.FromImage(BufferBm))
{
for (int i = 0; i < 500; i++)
{
g.DrawImage(tempContolImage, new System.Drawing.Point(i, 0));
this.Tempbox.Image = BufferBm;
Application.DoEvents();
System.Threading.Thread.Sleep(50);
}
}
答案 0 :(得分:3)
我还推荐WPF,因为它使用directx,但是如果你没有时间学习它,这可以帮助你:
How to fix the flickering in User controls
设置DoubleBuffered = true;
将此hack放入表单代码中:
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
如果你有usercontrol,请将其放入代码:
protected override CreateParams CreateParams {
get {
var parms = base.CreateParams;
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
return parms;
}
}
答案 1 :(得分:2)
使用WPF。 http://msdn.microsoft.com/de-de/library/ms752312(v=vs.110).aspx
你也可以混合winForms和WPF。
如果你不使用WPF,请确保将doublebuffer设置为true
答案 2 :(得分:0)