如何解决如何延迟代码将图像更改为另一个图像,然后返回
我正在尝试在表单开始10到20秒后将图片框中的图像更改为gif大约2秒钟,然后返回到原始图像,然后循环播放。我正在努力编写它,希望能得到任何帮助。
解决方法
我会将GIF加载为资源:项目->属性->资源->添加
然后使用如下代码:
Public Class Form1
Private ShowGif As Boolean = False
Private WithEvents tmr As New System.Windows.Forms.Timer
Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
tmr.Interval = TimeSpan.FromSeconds(10).TotalMilliseconds
tmr.Start()
End Sub
Private Sub tmr_Tick(sender As Object,e As EventArgs) Handles tmr.Tick
ShowGif = Not ShowGif
If ShowGif Then
' switch to two seconds
tmr.Interval = TimeSpan.FromSeconds(2).TotalMilliseconds
' save the current image in the tag
If IsNothing(PictureBox1.Tag) Then
PictureBox1.Tag = PictureBox1.Image
End If
' load the GIF
PictureBox1.Image = My.Resources.something ' <- change to your resource name
Else
' switch back to ten seconds
tmr.Interval = TimeSpan.FromSeconds(10).TotalMilliseconds
' restore the original image
PictureBox1.Image = PictureBox1.Tag
End If
End Sub
End Class
,
您可以使用Timer以指定的时间间隔(以毫秒为单位)生成滴答事件。
由于不同图像的时间各不相同,因此可以创建一个类来保存图像的文件名以及显示的时间长度-这将使决定将计时器间隔设置为图像的时间更加简单。被改变了。看起来好像很多打字,但保持简单是值得的。
然后,您可以创建该类的List,以便您可以根据需要拥有任意数量的实例,这些实例很容易引用。
例如,我将一个PictureBox放在窗体上并添加以下代码:
from datetime import date
start = date(year=2019,month=12,day=30)
today_date = date.today()
with DBConx(TEST_METRICS) as db_conx:
answer = db_conx.the_session.query(TestRun).filter(
(TestRun.datetime) >= start)
# This will print all entries from the start date.
print (len(answer.all()))
answer = db_conx.the_session.query(TestRun).filter(
(TestRun.datetime) == the_date)
# This will print all entries of today.
print (answer.all())
,它在Public Class Form1
Dim imageTimer As Timer
Dim timedImages As List(Of TimedImage)
Dim timedImageIndex As Integer
Class TimedImage
Public Property Filename As String
Public Property Duration As Integer
Public Sub New()
' Empty constructor
End Sub
Public Sub New(filename As String,duration As Integer)
Me.Filename = filename
Me.Duration = duration
End Sub
End Class
Private Sub TimedImageChange(sender As Object,e As EventArgs)
timedImageIndex = (timedImageIndex + 1) Mod timedImages.Count
' Dispose of the previous image (if any) to avoid a memory leak:
PictureBox1.Image?.Dispose()
PictureBox1.Image = Image.FromFile(timedImages(timedImageIndex).Filename)
imageTimer.Interval = timedImages(timedImageIndex).Duration
End Sub
Private Sub InitTimedImages()
timedImages = New List(Of TimedImage)
timedImages.Add(New TimedImage("C:\Temp\sprites\1\IM1.jpg",1000))
timedImages.Add(New TimedImage("C:\Temp\sprites\1\IM2.jpg",3000))
' Call the image change handler immediately so it can set itself up with the first image and interval:
imageTimer = New Timer With {.Interval = 1}
timedImageIndex = timedImages.Count - 1
AddHandler imageTimer.Tick,AddressOf TimedImageChange
imageTimer.Start()
End Sub
Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
InitTimedImages()
End Sub
Private Sub Form1_FormClosing(sender As Object,e As FormClosingEventArgs) Handles MyBase.FormClosing
' Tidy up.
If imageTimer IsNot Nothing Then
imageTimer.Stop()
imageTimer.Dispose()
End If
End Sub
End Class
方法中指定的两张图片之间交替显示图像。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。