PDA

View Full Version : نمایش عکسها به صورت کامل



arsalansalar
دوشنبه 30 دی 1387, 09:21 صبح
من یک برنامه نوشتم که میاد عکسها را به صورت slide نمایش میدهد.
اما هر دفعه فقط یک عکس را نمایش می دهد.
در آن قسمتی که قرمز کردم.می خواهم تمامی عکسهای در FileListBox1 را نمایش دهد ولی فقط اولین آیتم لیست باکس را show می کند:
اینم کدم:

Imports System.Windows.Forms
Imports System.Data
Imports System.Data.OleDb
Imports System.IO
Public Class Form4
Dim k As Integer
Dim n As Integer = 0
Dim u As Integer
Public Shared stringID As String
Public Shared ADD_edit_STATE As Boolean
Private Adapter As New OleDbDataAdapter()
Private DS As New DataSet
Dim CN As OleDbConnection
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
With OpenFileDialog1
.Filter = "jpg|*.jpg"
.FileName = ""
.Multiselect = True
.Title = "entekhab koon ax moredenazareto"
.InitialDirectory = "C:\my pictures"
If .ShowDialog = Windows.Forms.DialogResult.OK Then
Dim javad() As String = OpenFileDialog1.FileNames
Dim j As String
For Each j In javad
Me.FileListBox1.Items.Add(j)
Next
k = FileListBox1.Items.Count.ToString
Label1.Text = k & " ta ax entekhabshod "
Timer1.Enabled = True
End If
End With
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
''''''''''''''
For i As Integer = 0 To FileListBox1.Items.Count - 1
Try
PictureBox1.Image = Image.FromFile(FileListBox1.Items(0))
Catch jj As Exception
End Try
Next

End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
n = n + 1
Me.PictureBox1.Height = n
Select Case Me.PictureBox1.Height = n
Case Me.PictureBox1.Height = 398
n = 150
End Select
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Timer2.Enabled = False
Timer1.Enabled = False
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Timer1.Enabled = True
Timer2.Enabled = True
End Sub
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FileListBox1.Items.Clear()
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
End Sub

mostafaaa
دوشنبه 30 دی 1387, 09:40 صبح
سلام دوست من
خوب معلومه دوست من شما توی این قسمت :

FileListBox1.Items(0)فقط داری اولین آیتم از لیست باکست رو انتخاب میکنی، اون صفر که خود به خود یک نمیشه!! شما باید یکش کنی.!
در ضمن اگه قراره از حلقه استفاده کنی دیگه چرا حلقه رو گزاشتی توی تایمر!!
کدت از نظر شی گرایی کمی اشکال داره!
یا علی

arsalansalar
دوشنبه 30 دی 1387, 10:31 صبح
دوست عزیز منم می دونم که item(0) اولیو بر می گردونه.
منظور من این بود که جای اون قسمت چه حلقه ای بگذارم که تمامی item ها برگردد.

mostafaaa
دوشنبه 30 دی 1387, 10:50 صبح
دوست عزیز منم می دونم که item(0) اولیو بر می گردونه.
منظور من این بود که جای اون قسمت چه حلقه ای بگذارم که تمامی item ها برگردد.
سلام دوست من
والا از سوال اولتون منظورتون پیدا نبود
الاایحال اگه میخواید همه آیتمها رو برگردونید احتیاجی به تایمر ندارید همون حلقه کفایت میکنه ، فقط کدتون یه تغییر کوچیک لازم داره!

For i As Integer = 0 To FileListBox1.Items.Count - 1
Try
PictureBox1.Image = Image.FromFile(FileListBox1.Items(i))
Catch jj As Exception
End Try
Next

ولی اگه قرار که اسلاید شو باشه که باید حلقه رو حذف کنید و فقط از تایمر استفاده کنید و یه متغیر بیرون از تایمر تعریف میکنید و مقدارش رو داخل تایمر افزایش میدین .

mostafaaa
دوشنبه 30 دی 1387, 11:07 صبح
دوباره سلام دوست من
این مثال ساده رو نگاه کن شاید بتونه کمکت کنه:

Public Class Form1
Private WithEvents Timer1 As New Timer
Private List As String()
Private Count As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim OFD As New OpenFileDialog
With OFD
.Filter = "jpg|*.jpg"
.FileName = ""
.Multiselect = True
.Title = "entekhab koon ax moredenazareto"
.InitialDirectory = "C:\my pictures"
If .ShowDialog = Windows.Forms.DialogResult.OK Then
List = .FileNames
End If
Me.Timer1.Interval = 2000
Me.Timer1.Start()
End With
End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.PictureBox1.Image = Image.FromFile(List(Count))
If Count = List.Length - 1 Then Me.Timer1.Stop()
Count += 1
End Sub
End Class

arsalansalar
دوشنبه 30 دی 1387, 11:20 صبح
دوست عزیزم حل نشد!شما برنامه منو دانلود کن بی زحمت و دکمه play را بزن.می بینی 4 تا نام عکس در listbox بر می گردد ولی فقط یک عکس نمایش داده می شود.(فقط آدرس عکسها را از تو بانک ست کن چون آدرس نسبی نیست)

mostafaaa
دوشنبه 30 دی 1387, 12:08 عصر
سلام دوست من
به اون مثالی که برات گذاشتم خوب نگاه کن جواب مشکلت توش هست.

arsalansalar
شنبه 05 بهمن 1387, 13:52 عصر
در مثال شما عکسها از openfile می آید ولی عکسهای من از بانک اطلاعاتی آدرس آنها خوانده می شود و در یک listbox نمایش داده می شود.مشکل من همچنان پابرجاست.:عصبانی++:

mostafaaa
شنبه 05 بهمن 1387, 17:55 عصر
دوباره سلام دوست من
در مثال من آدرس عکسها توسط OpenFileDialog در یه آرایه ذخیره میشه و بعد مابقی ماجرا!!
مگه شما در مثالتون چیزی به غیر از آدرس عکسها رو در دیتابیستون ذخیره کردید؟؟
حالا به نظر شما این دو تا خیلی با هم متفاوتن ؟ و اینکه آیا شما که تا این مرحله پیش رفتین خیلی سخته که مثلا این قسمت از کد من رو تغییر بدین و آدرس عکسها رو از ListBox بخونین؟!!

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.PictureBox1.Image = Image.FromFile(Me.ListBox1.Items(Count))
If Count = Me.ListBox1.Items.Count - 1 Then Me.Timer1.Stop()
Count += 1
End Sub
یا علی