C#如何滑动面板
此代码只是更改位置,而不是滑动 我现在正在使用这个:C#如何滑动面板,c#,panel,slide,C#,Panel,Slide,此代码只是更改位置,而不是滑动 我现在正在使用这个: for (int i = 740; i == 740; i++) { panel2.Location = new Point(panel2.Location.X - i, panel2.Location.Y); } 如何才能缓慢滑动面板?现在,正如我在评论中所说,您确实需要使用float值,因此您确实需要绘制它。但是,当前的实现只进行了一次单次迭代。当前循环可以转换为: panel2.Location = new Poin
for (int i = 740; i == 740; i++)
{
panel2.Location = new Point(panel2.Location.X - i, panel2.Location.Y);
}
如何才能缓慢滑动面板?现在,正如我在评论中所说,您确实需要使用
float
值,因此您确实需要绘制它。但是,当前的实现只进行了一次单次迭代。当前循环可以转换为:
panel2.Location = new Point(panel2.Location.X - 740, panel2.Location.Y);
考虑这样的循环将其滑出:
for (int i = -(panel2.Width); i < 0; i++)
{
panel2.Location = new Point(i, panel2.Location.Y);
}
for(inti=-(panel2.Width);i<0;i++)
{
面板2.位置=新点(i,面板2.位置.Y);
}
该算法假设您已将位置设置为其宽度的-
(例如,-740x),以便它在屏幕上不可见。反之则会隐藏它
这仍然会有点起伏,但它不会像您当前的代码那样隐藏它。如果您只是想滑动面板,请尝试这样做
请尝试以下代码:
Panel panelArray = new Panel[];
Panel panel2 = panelArray[0];
for (int i = 0; i <= 100; i++)
{
panel2.Location = new Point(panel2.Location.X - i, panel2.Location.Y);
System.Threading.Thread.Sleep(10);
}
Panel-panelArray=新面板[];
Panel panel2=panelArray[0];
对于(int i=0;i这是WinForms还是WPF?这可能会比你想要的更复杂。看,就像电影一样,你需要更多的帧。然而,位置
和TRBL
属性都是int
值。你需要浮动
值,这样你就可以构建那种效果。这意味着你实际上必须绘制它。需要考虑两件事:(1)如果您在主GUI线程上执行此操作,那么它将阻塞,直到循环完成,这就是为什么您看不到它的幻灯片。您需要在单独的线程中执行此操作,并告诉GUI线程何时更新。(2)即使您使用另一个线程,它也会发生得非常快,所以您不会注意到。请将其速度减慢一点,例如,每次设置新值时都要等待1毫秒。@neoistheone,像素位置的浮点值?这听起来不是个好主意:)但是自定义绘制方法可能会起作用。没有为这种“动画”尝试过它尽管如此。@LarsKristensen,你知道我会这么说,除了点f
类的存在正是因为这个原因。:d-像素和点之间有很大的区别。是的,不错。你的东西像我希望的那样工作。多谢了,浮点值在这其中起到了什么作用?据我所知,你是s直到使用整数和点对象:)@LarsKristensen,我想我在开始回答问题时已经说得很清楚了。我不打算在此基础上构建一个GDI+示例。我给OP提供了一个可能的中间解决方案。根据OP的评论,我做到了。