Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Как реализовать слайд-шоу:?


Автор: Doc_d0s 29.9.2006, 10:41
Как реализовать слайд-шоу:?

Чтобы я только указал папку с файлами, построил список, и дал это список ф-ии, которая в PictureBox будет поочередено выводить файлы, которые будут показываться с соответствующей задержкой...

Автор: mr.DUDA 29.9.2006, 11:50
Примерно так: создаём форму, кидаем на неё таймер и PictureBox, в конструкторе формы (или в перекрытом методе OnLoad) создаём список имён файлов методом Directory.GetFiles, помещаем его в какое-нибудь поле класса, и запускаем таймер методом Start; в обработчике события Timer.Ellapsed берём очередное имя файла из массива имён, создаём битмап методом Bitmap.FromFile, пихаем его в пикчербокс, а ту картинку которая была до этого в боксе, Dispos-им.

Автор: Doc_d0s 29.9.2006, 17:30
Dispose приватный метод(

Автор: mr.DUDA 30.9.2006, 11:17
Цитата(Doc_d0s @  29.9.2006,  17:30 Найти цитируемый пост)
Dispose приватный метод(

Не приватный.

Вот пример кода:
Код
using System;
using System.IO;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsApplication4
{
    public partial class Form1 : Form
    {
        // массив имён файлов
        string[] _fileNames;
        
        // номер отображаемого файла в слайдшоу
        int _iFile = 0;

        public Form1()
        {
            InitializeComponent();

            if (!this.DesignMode)
            {
                // получаем список JPEG-файлов в заданной директории
                _fileNames = Directory.GetFiles("c:\\1\\", "*.jpg");

                // стартуем таймер
                this.timer1.Interval = 2000;
                this.timer1.Enabled = true;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (_fileNames.Length > 0)
            {
                // освобождаем ресурсы, занятые предыдущей картинкой
                if (this.pictureBox1.Image != null)
                    this.pictureBox1.Image.Dispose();

                try
                {
                    // назначаем новую картинку пикчербоксу
                    this.pictureBox1.Image = Image.FromFile(_fileNames[_iFile]);

                    // наращиваем счётчик
                    _iFile++;
                    if (_iFile > _fileNames.Length - 1)
                        _iFile = 0;
                }
                catch
                {
                    // в случае неудачи, ставим null в Image
                    this.pictureBox1.Image = null;
                }
            }
        }
    }
}


З.Ы. вместо наращивания счётчика можно было бы и так написать:
Код
Image.FromFile(_fileNames[_iFile++ % _fileNames.Length]);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)