прокрутка различных изображений в качестве фона в Visual Basic - PullRequest
0 голосов
/ 04 сентября 2011

Какой был бы лучший и самый простой способ изменить фоновое изображение в приложении VB из изображений, предварительно выбранных пользователем из любой заданной папки на жестком диске.

Так, например, «Майк» выбирает некоторые изображения вD: \ Images \ Nature в папке Nature у нас есть, скажем, «20» изображений.Теперь приложение VB считывает это и сохраняет путь, поэтому в следующий раз оно откроет загрузку изображений из этой папки еще раз.И каждые несколько секунд, скажем, 45 секунд загружается новое изображение для фона.

1 Ответ

0 голосов
/ 05 сентября 2011

Когда пользователь выбирает папку с изображениями, сохраняйте папку в реестре. Когда программа загрузится, извлеките папку из реестра. Вы можете сохранить его так:

SaveSetting ("mayappname","settings","picturefolder",PicFolderName)

и восстановить папку при загрузке программы:

Dim PicFolderName As String = GetSetting("mayappname", "settings", "picturefolder", My.Computer.FileSystem.SpecialDirectories.MyDocuments)

Этот пример читает ВСЕ jpg-изображения в папке и меняет изображение каждые 45 секунд на следующее изображение в папке. Если вы хотите, чтобы пользователь мог выбрать 20 изображений и вращаться между ними, дайте мне знать, тогда мы должны сохранить каждое изображение, выбранное пользователем, и вращаться только между ними. Но этот код вращается между всеми картинками в выбранной папке.

Полагаю, вы знаете, как изменить его, чтобы он работал только с изображениями, выбранными пользователем. Я не буду давать этот ответ, потому что это может быть сделано многими способами, поэтому мне нужно больше информации о том, как вы хотите, чтобы взаимодействие между пользователем и программой было до того, как я это сделаю.

Хорошо. Если у вас есть код, который хранит папку в реестре, вставьте его в форму, чтобы каждые 45 секунд изменять изображение из изображений в выбранной папке:

Private ImageNames As New List(Of String)
Private ImageIndexNow As Integer = 0
Private PictureTimer As New Timer

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Get the saved path for where the images are stored.
    Dim PicFolderName As String = GetSetting("mayappname", "settings", "picturefolder", My.Computer.FileSystem.SpecialDirectories.MyDocuments)
    'PicFolderName="c:\mypictures" ' remove rem if you just want to test with a specific folder
    'Call sub that read in all names of images in that path.
    LoadImageNames(PicFolderName)
    PictureTimer.Interval = 45000 '45 seconds
    PictureTimer.Enabled = True
    AddHandler PictureTimer.Tick, AddressOf PictureTimer_Tick
End Sub

Sub LoadImageNames(ByVal ImagePath As String)
    'Load image names in a list of strings for the provided Imagepath 
    For Each file As String In IO.Directory.GetFiles(ImagePath , "*.jpg")
        ImageNames.Add(file)
    Next
End Sub

Private Sub PictureTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
    'set background image of the form to image number imageIndexNow in the list of images
    Me.BackgroundImageLayout = ImageLayout.Stretch
    Me.BackgroundImage = Image.FromFile(ImageNames(ImageIndexNow))
    ImageIndexNow += 1 ' Add one to the number so next picture is selected next time the timer-tick is fired.
    If ImageIndexNow > ImageNames.Count-1 Then ImageIndexNow = 0 ' Start from zero if imageIndexNow is larger than amount of images.
End Sub

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    RemoveHandler PictureTimer.Tick, AddressOf PictureTimer_Tick
End Sub

Если вы хотите изменить это, чтобы повернуть только между 20 выбранными пользователем изображениями, измените программу, чтобы сохранить имена этих изображений в списке изображений изображений. И затем сохранить этот список в реестре, файле или базе данных. Когда программа загрузится, восстановите список, и вы сможете использовать приведенный выше код практически без изменений.

...