图像动画:VB.NET中移动图片框

问题描述 投票:0回答:1

在一个项目中,我试图在表单的一部分上创建幻灯片,对图片框进行动画处理并将其从右向左滑动,只要我使用仅一张图像,这就可以正常工作。 如果我在 3 个图像内循环,动画总是只显示最后一个图像! 我正在使用图片框(ImageSlider)和计时器(TmrMove)。

这是我尝试过的:

在开始幻灯片按钮中:

For Each s As String In sFiles
   Call MoveImage(s)
Next

MoveImage方法:

Private Sub MoveImage(sImage As String)
   drawingImage = Image.FromStream(New MemoryStream(File.ReadAllBytes(sImage)), True, False)
   ......
   ImageSlider.Image = drawingImage
   TmrMove.Interval = 2000
   TmrMove.Start()
End Sub

在 TmrMove_Tick 事件中:

For x = Width To LeftBorder Step -5
   ImageSlider.Left = x
   ImageSlider.Top = TopBorder
   ImageSlider.Refresh()
Next
TmrMove.Stop()

由于我不擅长图形和图像,有人能告诉我哪里做错了吗?我怀疑这与在继续之前等待第一次滑动完成有关,但无法弄清楚我的计时过程的哪一部分是错误的。

谢谢

vb.net image animation graphics timing
1个回答
0
投票

正如 Olivier 所指出的,在列表中加载图像并在计时器滴答事件中从列表中加载图像就可以了。

Tick 事件现在看起来像:

ImageSlider.Width = MyImageList(imgNum).Width
ImageSlider.Height = MyImageList(imgNum).Height
ImageSlider.Left = Width - ImageSlider.Width
ImageSlider.Top = TopBorder
ImageSlider.Height = LeftBorder
drawingImage = ScaleImage(MyImageList(imgNum), ImageSlider.Height, ImageSlider.Width)
ImageSlider.Image = drawingImage
For x = Width To PicImage.Left Step -5
   ImageSlider.Left = x
   ImageSlider.Top = TopBorder
   ImageSlider.Refresh()
Next
imgNum += 1
If imgNum = sFiles.Count Then
   TmrMove.Stop()
   Call StopSlideShow()
End If

可能不是最佳的,但有效。

© www.soinside.com 2019 - 2024. All rights reserved.