【问题标题】:PictureBox scrolling past edges of form erases contentsPictureBox 滚动表单边缘会擦除内容
【发布时间】:2021-05-13 12:41:00
【问题描述】:

我正在尝试在 VB 中创建一个简单的 winform 应用程序。我有一个表单,一个带有背景图像的图片框和一个按钮。当我按下按钮时,我希望图片框在表单中向左移动,直到它从左侧消失。然后我希望它重新出现在右侧并再次向左移动。

初始条件:

问题似乎是图片框超出表单边界的区域被删除了。所以第一次周围的图像很好地从表单的左侧滑出,并且永远不会回到右侧。或者更确切地说,它确实回来了,我只是看到它。

第二次滚动,图片框中超出表格边界的部分图像已被删除(左)或扭曲(右):

在下面的代码中,我故意更改了图片框的边界,以便我可以看到它实际上是在循环播放。但正如你在这张图片中看到的那样,图片框超出表单边界的部分要么被擦除,要么被扭曲。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Do
            PictureBox1.Left -= 1
            Threading.Thread.Sleep(2)

            If PictureBox1.Left <= -20 Then 'If PictureBox1.Left <= PictureBox1.Width Then
                PictureBox1.Left = Me.Width - 40 'PictureBox1.Left = Me.Width
            End If

        Loop
    End Sub
End Class

我已经在两台不同的计算机上同时使用 VS2019 和 VS2017 进行了尝试,并且发生了同样的事情。我也试过用文本框替换图片框,结果也差不多。

【问题讨论】:

  • 睡眠会把事情锁起来。不要使用它。
  • 不要那样做。使用 System.Windows.Forms.Timer 更改图片在其 Tick 事件中的位置。 Example

标签: vb.net image winforms picturebox


【解决方案1】:

我把我的代码改成了这个,现在它可以完美运行了。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Timer1.Interval = 25
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        PictureBox1.Left -= 1

        If PictureBox1.Left <= -PictureBox1.Width Then
            PictureBox1.Left = Me.Width
        End If
    End Sub
End Class

【讨论】:

  • 您可以接受您自己的答案以表明它解决了问题(单击复选标记)。
猜你喜欢
  • 2020-11-08
  • 2012-05-10
  • 2014-10-21
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
相关资源
最近更新 更多