如何延迟代码将图像更改为另一个图像,然后返回

问题描述

我正在尝试在表单开始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 方法中指定的两张图片之间交替显示图像。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...