Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 34

Как сериализовать стандартные контролы?

28.05.2014, 13:01. Показов 2249. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Если кто знает, можете подсказать...
Можно ли каким то образом серриализовать в BinaryFormatter стандартные контролы (например Button)...

при моих попытках вылетает следующий Exeption:
Code
1
Тип "System.Windows.Forms.Button" в сборке "System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" не помечен как сериализуемый.
файл формы:
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
42
43
44
45
46
47
48
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace test1
{
    public partial class Form1 : Form
    {
        Bb b;
 
        public Form1()
        {
            InitializeComponent();
 
            Init();
 
            Ser();
        }
 
        void Init()
        {
            b = new Bb();
 
            b.btn = new Button();
            b.btn.Size = new Size(50, 25);
            b.btn.Location = new Point(10, 10);
            b.btn.Text = "btn";
 
            Controls.Add(b.btn);
        }
 
        void Ser()
        {
            FileStream FS = new FileStream("1.txt", FileMode.Create, FileAccess.Write);
            BinaryFormatter BF = new BinaryFormatter();
            BF.Serialize(FS, b);
            FS.Close();
        }
    }
}

файл класса:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace test1
{
    [Serializable]
    class Bb
    {
        public Button btn;
 
    }
}

Это пример того что хочу сделать...
Объясняю зачем это (просто поиск по гуглу дал только вопросительные ответы "А Зачем это нужно")...

На учебе по WindowsForm дали задание написать игру "Морской Бой" с возможность сохранять и загружать игры...
Поле должно быть построено на кнопках...

Саму игру я написал... Играет отлично... Но проблема с сохранением... Просто в текстовый файл сохранять запарюсь...

Подскажите, может есть какие другие пути сохранения классов?

Заранее Спасибо...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2014, 13:01
Ответы с готовыми решениями:

Как сериализовать из Textbox
Нужно сохранить данные введенные в текстбокс, чтобы сохранились последние и отобразились потом! using System; using...

Как сериализовать и десериализовать объекты классов?
Имеются классы Pozition.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Стандартные контролы в iOS
Приветствую братья и сестры! Я только что начал изучать все прелести разработки под iOS. Возникают вопросы, на которые нкак не могу...

4
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.05.2014, 13:09
Цитата Сообщение от AlexesZ Посмотреть сообщение
просто поиск по гуглу дал только вопросительные ответы "А Зачем это нужно"
Правильный вопрос.
Цитата Сообщение от AlexesZ Посмотреть сообщение
Подскажите, может есть какие другие пути сохранения классов?
Сериализация - правильный способ, только сериализовать надо не интерфейс, а данные.
0
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 34
28.05.2014, 13:13  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
Сериализация - правильный способ, только сериализовать надо не интерфейс, а данные.
Изначально поля из кнопок были частью класса с данными (так было проще отслеживать нажатия)...

Сейчас я вынес поля кнопок в отдельный класс ... его я не помечал как серриализуемый (в этом случае выскакивает ошибка, что "этот класс не помечен как серриализуемый")...

хотя в классах с данными нет ни одной кнопки, но есть работа с кнопками в методах...


я понимаю, что это как бы костыльные методы... но другого пока не знаю...
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.05.2014, 13:20
Лучший ответ Сообщение было отмечено AlexesZ как решение

Решение

Цитата Сообщение от AlexesZ Посмотреть сообщение
но есть работа с кнопками в методах...
Сериализуются публичные свойства объекта, но не методы.

Допустим у Вас некорректный был подход, но сохранение надо сделать, тогда подойдём с другой стороны, что нужно запомнить? Состояние карты, чей ход. Создайте отдельную структуру для этого и её уже сохраните, также напишите метод для восстановления состояния игры из этой структуры.
0
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 34
28.05.2014, 14:14  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
Создайте отдельную структуру для этого и её уже сохраните, также напишите метод для восстановления состояния игры из этой структуры.
Таки Да... так получилось... единственное, помучился что бы сделать метод копирования классов... со ссылками так же не прокатило...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2014, 14:14
Помогаю со студенческими работами здесь

В библиотеке X (Xlib) есть стандартные контролы, или только ручками рисовать?
Если их там нет, то почему тогда на Ubuntu во ВСЕХ приложениях (что на GTK, что на Tkinter) кнопочки примерно одинаково выглядят,...

Пропали многие стандартные программы! Такие, как Paint, стандартные игры
Пропали многие стандартные программы! Такие, как Paint, стандартные игры, перестал работать поиск, выдает ошибку "Непредвиденная...

Как сериализовать наследование?
Всем привет! Я изучаю Unity+C# - 2 года и расширения редактора - 4 месяца из них 1 месяц уже мучаюсь над вопросом, как сериализовать...

Как сериализовать List<>?
Продолжаю писать свою игрушку... Решил сделать инвентарь через List&lt;Item&gt;, где Item -- класс предмета. Так вот, теперь сохранение через...

Как сериализовать значение listBox-а
Вот код: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru