Хочешь создать свой собственный, крупный проект? На этом уроке мы заложим основу твоей супер-программы — Портфолио, которое соберёт в себя все твои лучшие программы. Этот проект будет расширяться по мере создания новых программ.
Задание: Создать программу-каталог своих лучших работ на C#. Обновлять каталог после каждой созданной программы.
Дата отправки отчёта:
17 декабря 2015 г.
Задание выполнено: за
2 час. 40 мин.
Чему научился:
1) Повторил использование Process.Start для запуска приложений. 2) TabControl. 3) Самостоятельно изучал различные способы вывода информации на форму.
Что было сложным:
Определиться с интерфейсом портфолио.
Комментарии:
Сначала сделал все как в уроке, кроме момента, когда подключались классы из других проектов. Мне данный подход не понравился, потому что надо помнить обо всех связях, ресурсах и прочих мелочах тех проектов, которые я разрабатывал несколько месяцев назад. Вручную добавлять исходники по одному не комильфо. Поэтому я целиком импортировал свои проекты в "solution", добавил reference на них. В итоге, нет проблем с namespace, все локально и работает как надо.
Далее я вернулся к первому варианту, где мы просто запускаем исполняемый файл из папки "Exec". Это решение на мой взгляд лучше подходит для портфолио. Здесь это решение можно расширить, используя вместо исполняемого файла инсталятор данного приложения или перенаправить пользователя на нужную страницу в интернете для скачивания программы.
Достаточно долгое время думал над интерфейсом формы. Причина была в том, что Евгений Витольдович предложил добавлять новые приложения в портфолио. Я задумался, как это можно сделать удобнее. В итоге, перебрав разные варианты, остановился на использовании компонента ListBox для динамического вывода списка приложений. Предложенный в уроке табличный вариант я убрал, так как было неудобно вручную добавлять картинки и описание игр за границы формы. Вместо этого у меня один PictureBox, выводящий картинку той игры, которая выбрана в списке по событию SelectedIndexChanged. Описание выделил в единичный TextBox, текст которого так же зависит от выбранного элемента в списке игр. Все данные хранятся в коллекции List<>, которые по-хорошему надо бы загружать из файла конфигурации, а потом из конкретных файлов описания игр, но это я остановил на будущее. Пока что вся текстовая информация содержится в константах кода программы.
Спасибо за обзор, тоже посмотрел. Очень понравилось! Особенно понравилось приведение object tostring, а потом спарсить в инт! Наверное, сам бы до такого не додумался. Теперь буду знать, что так можно делать.
Научился: Внедрять решения в проект. И то, не до конца. Принцип понял. Круто конечно иметь свою библиотеку собственных программ. Трудности: Внедрить решения в проект, настроить, чтобы все работало. Очень полезный видеоурок. У меня есть один вопрос, может кто сталкивался с такой проблемой. Я создал папку, добавил файлы, прописал пространства имен (namespace), но при запуске выдает ошибку: "Необработанное исключение типа "System.Resources.MissingManifestResourceException" в mscorlib.dll
Дополнительные сведения: Не удалось найти ресурсы, соответствующие указанной культуре или нейтральной культуре. Проверьте правильность внедрения или связывания "Portfolio.Balda.FormBalda.resources" со сборкой "Portfolio" во время компиляции, или убедитесь, что все необходимые сопутствующие сборки полностью подписаны и могут быть загружены." Ошибка в строке: this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); (Designer.cs). Я просто закомментировал эту строку и все работает, НО! иконка не показывается при открытии программы (см. рисунок 2). Такой казус при добавлении игры "Бот для игры Балда", а вот добавлял аналогично игру "Пятнашки (игра 15)", все работает, и иконка отображается. Я там конечно сначала namespace переименовывал, потом еще что-то помудрил и, вуаля, иконка программы есть. А в игре "бот для игры Балда" не хочет. Может кто сталкивался с подобной вещью?
И я где-то видел у кого-то в отчете такую "фишку" - увеличение размера картинки при наведении мыши. Захотелось сделать так же - добавил обработчики событий при наведении и убирании (не смог подобрать антоним) мышки с PictureBox (события MouseHover и MouseLeave), получилось довольно неплохо). И сделал это через sender, так гораздо удобнее, так как не надо каждый раз создавать событие при клике на нужный PictureBox.
p.s. Прошу прощения за так много буковок)