Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
1

Создание галереи в ListBox

19.05.2014, 17:05. Показов 4935. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток!
В процессе проектирования программы захотелось создать галерею, а в процессе реализации понял, что как ее реализовать не знаю. Полез в интернет и нечего конкретного не нашел.
Хотелось бы реализовать что то подобное данному видео(на 9 минуте).
Вообще суть в чем, в базе хранятся пути к изображениям, возможно ли сделать так чтобы в listbox выводились изображения по этим адресам? Желательно так как на видео в примере использования "skin3".
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2014, 17:05
Ответы с готовыми решениями:

Создание динамической галереи: при большом количестве картинок приложение работает медленно
Необходимо динамически выводить таблицу из картинок. Картинок может быть более 100 штук,...

Динамическое создание listbox и отображение его на панели
Извините за такой тупой вопрос, но я честно гуглил и не нашел. В моем классе есть метод Draw,...

ListBox как сделать что бы элемент ListBox выполнял действия
на пример элемент ListBox очистил бы texbox

Сравнить два ListBox-а, совпадающие элементы вывести в третий ListBox
Друзья, есть два Listbox, в которых храниться значения = папка и путь( пример "D:\папка) И во...

14
59 / 59 / 33
Регистрация: 08.03.2014
Сообщений: 138
19.05.2014, 18:33 2
Ghost_Inq, Подробное описание подобной программы описано в книге Натана Адама "wpf 4" в главе "Привязка к данным".
1
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
19.05.2014, 19:40  [ТС] 3
you_rule, а возможно ли это будет применить к проекту Windows Form?
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
19.05.2014, 20:09 4
Ну, на WinForms это делается через события, тут через привязки...
1
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
19.05.2014, 20:18  [ТС] 5
Spawn, а Вы можете подсказать литературу или видео как подобное сделать для WinForms?
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
19.05.2014, 20:20 6
Там литературы-то... ListBox, событие SelectedIndexChanged и отображение картинки...
1
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
19.05.2014, 20:31  [ТС] 7
Spawn, и в каком виде это будет отображаться?
0
59 / 59 / 33
Регистрация: 08.03.2014
Сообщений: 138
19.05.2014, 20:57 8
Ghost_Inq, Нет, к сожалению к WinForms нельзя
1
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
21.05.2014, 18:05  [ТС] 9
Spawn, Не могли бы Вы чуть подробнее описать как именно реализовать
Цитата Сообщение от Spawn Посмотреть сообщение
ListBox, событие SelectedIndexChanged и отображение картинки
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
22.05.2014, 10:07 10
Лучший ответ Сообщение было отмечено Ghost_Inq как решение

Решение

Вот пример. Основных событий 2:
1) Выбор папки и заполнение списка с изображениями
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        /// <summary>
        /// Событие нажатия на кнопку выбора папки
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPath_Click(object sender, EventArgs e)
        {
            // Отображем диалог для выбора папки
            // если пользователь выбрал папку, идём дальше
            if (folderBrowser.ShowDialog() == DialogResult.OK)
            {
                // Отображем путь к выбранной папке в текстовом поле
                tbPath.Text = folderBrowser.SelectedPath;
                // Очищаем текущий список изображений
                lbImages.Items.Clear();
                // Директория по выбранному пути
                DirectoryInfo dir = new DirectoryInfo(tbPath.Text);
                // Заполняем ListBox файлами из папки
                lbImages.Items.AddRange(dir.GetFiles());
            }
        }
2) Выбор элемента в списке:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        /// <summary>
        /// Событие выбора элемента в списке
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lbImages_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Если есть выбранный элемент
            if (lbImages.SelectedIndex != -1)
            {
                // Так как возможны ошибки, используем try...catch
                try
                {
                    // Достаём из ListBox информацию о нашем файле
                    FileInfo fi = lbImages.SelectedItem as FileInfo;
                    // Пытаемся достать изображение
                    Bitmap img = new Bitmap(fi.FullName);
                    // Если размер области меньше, чем изображение
                    if (img.Width > pbImage.Width || img.Height > pbImage.Height)
                        // Изображение будет подогнано под размер области
                        pbImage.SizeMode = PictureBoxSizeMode.Zoom;
                    else
                        // Изображение будет в центре, без изменения исходного размера
                        pbImage.SizeMode = PictureBoxSizeMode.CenterImage;
                    // кладём изображение в PictureBox
                    pbImage.Image = img;
                }
                // Если по указанному пути не изображение
                catch (ArgumentException) { }
                // Если не удаётся обратиться к файлу
                catch (System.Security.SecurityException) { }
            }
        }
В первом событии, понятное дело, можете заполнить список чем угодно и откуда угодно, главное учесть, что в ListBox в моём примере кладётся FileInfo.

Также прикрепляю проект, так как в случае с WinForms без него сложно.
Обращайте внимание на изменённые свойства в дизайнере.
Вложения
Тип файла: rar ListBoxGallery.rar (10.7 Кб, 138 просмотров)
0
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
22.05.2014, 12:03  [ТС] 11
Spawn, Большое спасибо! А вот еще такой вопрос как это все организовать если ссылки(пути) на картинки хранятся в Access базе, возможно ли в таком случае применить Ваш пример?
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
22.05.2014, 12:08 12
Всё возможно, было бы желание.
Вместо строк
C#
1
2
3
4
                // Директория по выбранному пути
                DirectoryInfo dir = new DirectoryInfo(tbPath.Text);
                // Заполняем ListBox файлами из папки
                lbImages.Items.AddRange(dir.GetFiles());
Будет соответственно запрос к базе, получение данных оттуда, добавление в список.
Допустим будет просто текстом ссылка занесена в ListBox, тогда в обработчике события SelectedIndexChanged вместо
C#
1
2
3
4
                    // Достаём из ListBox информацию о нашем файле
                    FileInfo fi = lbImages.SelectedItem as FileInfo;
                    // Пытаемся достать изображение
                    Bitmap img = new Bitmap(fi.FullName);
Будет нечто следующее:
C#
1
2
3
4
                    // Достаём из ListBox информацию о нашем файле
                    String path = lbImages.SelectedItem as string;
                    // Пытаемся достать изображение
                    Bitmap img = new Bitmap(path);
Если ссылки на удалённые изображения, то WebClient, загрузка изображения и т.д. и т.п.
1
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
22.05.2014, 12:16  [ТС] 13
Spawn, и последний вопрос с которым никак не могу разобраться, как лучше передавать значения с базы (то есть вытаскивать эти самые ссылки)?
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
22.05.2014, 12:23 14
Если нужны только ссылки (текст), то так и доставать, если же какие-то ещё полезные и не очень данные есть, то DataTable заполняем, который потом можно в качестве DataSource подсунуть ListBox'у.
1
1 / 1 / 0
Регистрация: 22.02.2013
Сообщений: 65
22.05.2014, 16:57  [ТС] 15
Spawn, Большое спасибо, Вы мне очень помогли!

Добавлено через 1 час 19 минут
Spawn, извините что еще беспокою Вас, не могли бы Вы подсказать, что я делаю не так?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
string id = dataGridView1.SelectedCells[0].Value.ToString();
            try
            {
                cmd = new OleDbCommand("SELECT Фото FROM Фото_изделий WHERE ID_изделия=" + id, con);
                con.Open();
                cmd.ExecuteNonQuery();
                OleDbDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    lbImages.SelectedItem = rdr.GetString(0);
                }
                rdr.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
 
            if (lbImages.SelectedIndex != -1)
            {
                try
                {
                    String path = lbImages.SelectedItem as string;
                    Bitmap img = new Bitmap(path);
 
                    if (img.Width > pbImage.Width || img.Height > pbImage.Height)
                        pbImage.SizeMode = PictureBoxSizeMode.Zoom;
                    else
                        pbImage.SizeMode = PictureBoxSizeMode.CenterImage;
                    pbImage.Image = img;
                }
                catch (ArgumentException) { }
                catch (System.Security.SecurityException) { }
            }
Добавлено через 2 часа 57 минут
upp
0
22.05.2014, 16:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2014, 16:57
Помогаю со студенческими работами здесь

Самописный класс ListBox: как создать коллекцию, которая будет отображаться в свойствах ListBox?
Создаю класс ListBox, который наследуется от System.Windows.Forms.ListBox Скажите пожалуйста, как...

Перенос Items из Listbox 1-ой формы в Listbox 2-ой. Сохранение изменений
Добрый день, изучаю C#, пользуюсь Visual Studio 2015, Windows Forms. Проблема такова: На первой...

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

Многострочный listbox (или перенос строки в listbox)
Здравствуйте) нужно сделать вот что.. Есть listbox определенного размера и определенного цвета под...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru