Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
skynet_igor
0 / 0 / 2
Регистрация: 19.06.2016
Сообщений: 11
Завершенные тесты: 2
#1

Windows Forms и сериализация. Сериализация контрола - C#

23.09.2016, 20:19. Просмотров 558. Ответов 4
Метки нет (Все метки)

Привет всем. Для того что бы набраться опыта делаю игрушку-лабиринт. В есть старт и финиш. Нужно вести мышкой и не попадать на стены. Игру такую видел где то на ютубе, НО! Там было это реализовано через студию, а именно каждый уровень это была отдельная форма. То есть уровни нужно было создавать через студию и заново компилировать.
Я захотел сделать редактор уровней и саму игру которая эти уровни читает. В редакторе создаем уровень, сохраняем его в файл в формате *.labmap, в игре его открываем и играем.
Создал три проекта - Editor, Engine(сборка), Play. Настроил связи Editor-Engine, Play-Engine.
Пока что работаю над редактором. В редакторе реализовал добавление стен на поле динамически в List, выбор нескольких элементов с зажатым CTRL и применение им свойств(цвет, размер), копи(кнопка С)\паст(кнопка V) элементов, удаление элементов(кнопка Del) и там много чего другого.
Стены - класс WallItem унаследованный от BaseItem, а BaseItem от Label.
Решил уже попробовать сохранить коллекцию стен в файл, но ничего не получается. Пометил класс Wall, BaseItem атрибутом [Serializable].List<BaseItem> инициализируется в проекте Engine в классе Elements. И при попытке сериализовать BinaryFormatter выдает исключение SerializeException. В сведеньях посмотрел - пишет что мол Label не помечен атрибутом [Serializable].
Пробовал пометить класс Elements атрибутом [Serializable] выдает ту же ошибку.
Как решить проблему?

P.S. Простите за такой объем текста)

P.S.S Выкладываю решение
http://www.cyberforum.ru/windows-forms/thread1754471.html
0
Миниатюры
Windows Forms и сериализация. Сериализация контрола  
Вложения
Тип файла: rar Labirint.rar (113.3 Кб, 0 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2016, 20:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Windows Forms и сериализация. Сериализация контрола (C#):

Сериализация/десериализация
Добрый день! Прошу помочь с сериализацией, нашла туториал, все сделала, как там...

Сериализация не выполняется
System.ArgumentNullException: &quot;Граф объекта не может быть неопределенным. Имя...

Не работает сериализация
Сегодня нашел старый проект, и когда запустил удивился что не работет...

Не работает сериализация
Хотел сделать так что бы при запуски программы, восстанавливались данные а при...

Сериализация и десириализация
Добрый вечер. Делаю программу и появилась надобность сделать сериализацию и...

4
insite2012
Модератор
Эксперт .NET
4790 / 3749 / 1081
Регистрация: 12.10.2013
Сообщений: 10,986
Записей в блоге: 2
23.09.2016, 20:22 #2
Цитата Сообщение от skynet_igor Посмотреть сообщение
Как решить проблему?
Не сериализовать контролы. Создайте модели, по данным из которых ваши контролы будут отрисовываться, и их уже сериализуйте.
0
skynet_igor
0 / 0 / 2
Регистрация: 19.06.2016
Сообщений: 11
Завершенные тесты: 2
23.09.2016, 23:21  [ТС] #3
Не совсем понятно) а как тогда сама игра будет знать сколько контролов ей нужно создать и с какими свойствами?
Я думал сделать так: В редакторе List элементов сереализовать, а в игре десериализовать и в цикле добавить элементы списка на панель со всеми всеми их свойствами. Но так не получается...
0
insite2012
Модератор
Эксперт .NET
4790 / 3749 / 1081
Регистрация: 12.10.2013
Сообщений: 10,986
Записей в блоге: 2
24.09.2016, 02:04 #4
Цитата Сообщение от skynet_igor Посмотреть сообщение
Не совсем понятно)
Что непонятно? К примеру, есть у вас список объектов Label. Создаете свой класс, к примеру, LabelInfo, в нем автосвойства, которые отображают значения, которые нужно установить для контрола. Потом список типа List<LabelInfo>, и его сериализуете. При десериализации этого списка создаете количество Labеl-ов и устанавливаете их свойства на основе свойств моделей.
0
skynet_igor
0 / 0 / 2
Регистрация: 19.06.2016
Сообщений: 11
Завершенные тесты: 2
24.09.2016, 07:44  [ТС] #5
А если сделать так?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Serializable]
abstract public class ItemCreator
{
[NonSerializable]
Control control;  //на случай если нужно будет использовать что то кроме Label
public Point Location
      {
          get { return control.Location }
          set { control.Location = value }
       }
public Color BackColor
      {
          get { return control.BackColor }
          set { control.BackColor =  value}
       }
}
 
[Serializable]
public WallCreator
{
       control = new Label();
}
А потом создавать коллекцию WallCreator и с ней работать? Получится?
Сериализации касаюсь впервые. Читал что свойства тоже сериализуются.

P. S. Мог что то упустить в коде так как писал в обычном блокноте)
0
24.09.2016, 07:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2016, 07:44
Привет! Вот еще темы с решениями:

Сериализация XML
По закрытию программы данные из 4х текстбоксов должны сохраниться, при открытии...

Сериализация и exe
Всем привет! Создал программу. К ней exe-шник. Все устанавоивается, работает,...

XML Сериализация
Всем доброго времени суток. Решил изучить XML Сериализацию и остановился на...

Сериализация datadridview
Нужна помощь! Создали программно лист, привязали к DataGridView ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru