Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2010, 15:35   #11
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

не надо ничего в классе менять! просто добавь пустой конструктор - без параметров и наполнения.
Код:
public MyClass()
        { }
list.Add() - внутри ты должен проинициализировать экземпляр класса. по-другому никак.
(MyClass)this.listViewMyClass.Items[i].Tag инициализирует новый экземпляр класса? (один экземпляр, со всеми заполненными полями)

скинь свой конструктор
Life if about choices
Make the right choice

Последний раз редактировалось Stilet; 15.03.2010 в 12:22.
TaTT DoGG вне форума Ответить с цитированием
Старый 13.03.2010, 16:46   #12
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Даже лучше скину часть класса и перечисления, чтобы более понятно было:

Код:
namespace WindowsFormsApplication1
{
    
    public enum ModeAlarm : byte
    {
        ONE_ALARM, EVERY_HOUR, EVERY_DAY, EVERY_WEEK, EVERY_MONTH, EVERY_YEAR, OTHER
    }

    
    public enum SideForShowing : byte
    {
        LEFT_UP, LEFT_DOWN, CENTER, RIGHT_UP, RIGHT_DOWN
    }

   
    public enum StyleMessage : byte
    {
        Stiker, WideWinForm, MiniStiker, SkinForm
    }

    
    public enum DayOfWeekAlarm : byte
    {
        ponedelnik, vtornik, sreda, chetverg, pyatnica, subbota, voskresenie
    }

    
    public enum Actions : byte
    {
        RunPrograms, WindowsActions
    }

    

    /// <summary>
    /// Будильник
    /// </summary>
    public class AlarmClock
    {
        #region [ Поля AlarmClock ]
        /*/////////////////////////*/
        public DateTime dateTimeAlarm;
        private int levelVolume;           //уровень громкости
        private int secondsForPlay;        //кол-во секунд, которое будет играть будильник при срабатывании
        private UInt16 secondsForUpVolume; //время за которое повышается уровень громкости
        //строки
        private String Msg;           //текст сообщения
        private String musicWay;      //Путь к музыке
        //булёвые
        private bool needPlayMusic;   //нужно ли играть музыку
        private bool needWindowsExit; //выключать ли компьютер
        private bool needWindowsRestart; //перезагружать ли компьютер
        private bool needWindowsWaitingMode; //перейти в ждущий режим
        private bool needRepeatMusic; //повторять ли воспроизведение
        private bool needChangeVolume;//изменять ли громкость
        private bool needDoActions; // нужно ли выполнять какие либо действия
        //перечисления
        public ModeAlarm Mode;
        public SideForShowing SideShowing; // сторона с которой появляется сообщение
        public StyleMessage styleMessage; //стиль сообщения
        public DayOfWeekAlarm dayOfWeekAlarm; //день недели для срабатывания в режиме "Каждую неделю"
        public Actions actions; //выполняемые действия (запуск программ или действия с Windows)
        private static int quantityAlarms; //кол-во будильников
        //прочее
        private float opacityFormMsg; //уровень прозрачности фомы сообщения
        private Font fontMsg; //шрифт сообщения
        private Color fontMsgColor; //цвет шрифта
        private Color fontBackGroundColor; //цвет фона сообщения
        private Color borderMsgColor; //цвет оборки, для некоторых стилей
        public List<WayForFile> ListFilesForRun; //список запускаемых файлов
        /*/////////////////////////*/
        #endregion

        public AlarmClock() //конструктор
        {
            quantityAlarms++; //увеличить на 1
            dateTimeAlarm = DateTime.Now;
            levelVolume = 100;
            secondsForPlay = 0;
            secondsForUpVolume = 0;
            Msg = String.Empty;
            musicWay = String.Empty;
            needPlayMusic = true;
            needWindowsExit = false;
            needRepeatMusic = false;
            needChangeVolume = false;
            Mode = ModeAlarm.ONE_ALARM;
            SideShowing = SideForShowing.CENTER;
            opacityFormMsg = 1.0F;
            fontBackGroundColor = Color.LemonChiffon;
            borderMsgColor = Color.LightBlue;
            ListFilesForRun = new List<WayForFile>();
        }

        ~AlarmClock() //деструктор
        {
            quantityAlarms--; //уменьшить на 1
        }
...

Последний раз редактировалось Casper-SC; 13.03.2010 в 16:49.
Casper-SC вне форума Ответить с цитированием
Старый 13.03.2010, 16:52   #13
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

В сообщение выше не поместилось
Вот Лист который является одним из полей класса:
Код:
    public struct WayForFile
    {
        /// <summary>
        /// Полный путь для запуска
        /// </summary>
        public String Way;   

        /// <summary>
        /// Название (заголовок)
        /// </summary>
        public String Title; 

        /// <summary>
        /// Имя запускаемого файла, без пути
        /// </summary>
        public String FileName; 

        /// <summary>
        /// Папка где находится файл
        /// </summary>
        public String FilePath; 

        /// <summary>
        /// Параметры запуска для запускаемого приложения
        /// </summary>
        public String Parameters;

        /// <summary>
        /// Включён ли файл для запуска
        /// </summary>
        public bool EnabledFile; 


        private int windowMode;
        /// <summary>
        /// Сосотояние окна (Нормальное, Свёрнутое, Развёрнутое)
        /// </summary>
        public int WindowMode
        {
            get { return windowMode; }
            set 
            {
                if (value <= 3 | value >= 0)
                {
                    windowMode = value;
                }
                else
                {
                    //присвоиться окно нормального размера
                    windowMode = 0;
                }
            }
        }
Casper-SC вне форума Ответить с цитированием
Старый 13.03.2010, 17:02   #14
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

ага, ясно... интересный класс. как я понял, это будет будильник.
а для чего нужен этот класс в программе? это настройки или ещё что-то?
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 13.03.2010, 17:28   #15
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Ну собственно это и будильник и напоминатель и запускатель программ в нужное время и выключатель компьютера, как бы всё зависит как настроишь. Или всё сразу. В принципе будет использоваться по назначению это одна из функций программы, то есть я не пишу тупо 1 будильник. Не знаю правильно ли я сделал... нужен класс для того, чтобы принять настройки из формы настроек, по моему можно было использовать и просто структуру, но ещё не всё дописано, скорее всего в классе будут методы проверки времени в зависимости от режима будильника, корректировка будильника, если часы были переведены (чтобы не сбилось всё, ведь будильников может быть много.)

Вот может картина станет яснее:
Код:
        /// <summary>
        /// Добавить будильник в указанный ListView
        /// </summary>
        /// <param name="alarm">Будильник который нужно добавить</param>
        /// <param name="listView">Список в который нужно добавить</param>
        private void AddInListView(ref AlarmClock alarm, ListView listView)
        {
            string msg, date, period = string.Empty;
            msg = alarm.Message;
            date = "не работает"; // временно, пока не работает :)

            switch (alarm.Mode)
            {
                case ModeAlarm.ONE_ALARM : period = "Одноразовый";
                    break;

                case ModeAlarm.EVERY_HOUR : period = "Каждый час";
                break;

                case ModeAlarm.EVERY_DAY : period = "Каждый день";
                break;

                case ModeAlarm.EVERY_WEEK : period = "Каждую неделю";
                break;

                case ModeAlarm.EVERY_MONTH : period = "Каждый месяц";
                break;

                case ModeAlarm.EVERY_YEAR : period = "Каждый год";
                break;

                case ModeAlarm.OTHER: period = "Другое";
                break;
            }

            int i = this.listViewAlarm.Items.Add(msg).Index;
            this.listViewAlarm.Items[i].SubItems.Add(date);
            this.listViewAlarm.Items[i].SubItems.Add(period);
            this.listViewAlarm.Items[i].Checked = true;
            this.listViewAlarm.Items[i].Tag = alarm;  //привязываем уже настроенный будильник к элементу списка
        }
Код:
        private void btnNew_Click(object sender, EventArgs e)
        {
            FormAddNewClock formAddNewClock = new FormAddNewClock();
            if (formAddNewClock.ShowDialog(this) == DialogResult.OK)
            {
                AlarmClock alarmClock;
                formAddNewClock.TransferAlarmClock(out alarmClock); //получить настройки в класс из формы настроек будильника
                AddInListView(ref alarmClock, this.listViewAlarm);
            }
        }

Последний раз редактировалось Casper-SC; 13.03.2010 в 17:35.
Casper-SC вне форума Ответить с цитированием
Старый 13.03.2010, 18:31   #16
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

а зачем нужен массив классов?
в общем я считаю что у такого класса просто обязаны быть параметры конструктора
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 13.03.2010, 18:41   #17
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Ну массив классов представляет из себя список активных будильников. И нужен, чтобы сохранять их из списка и востанавливать в список, проще говоря так удобнее. Какие параметры у этого класса должны быть? Просто я не могу никак сохранить эти классы в файл, а потом загрузить и создать список на основе сведений загруженных из ранее сохранённого класса. Я вот думаю может мне создать структуру чисто с полями и при сохранении перегонять все сведения в массив таких структур, просто я до сих пор не понимаю как можно сохранить класс, ведь там не только поля, вообще что-то не въезжаю в это.

Последний раз редактировалось Casper-SC; 13.03.2010 в 18:47.
Casper-SC вне форума Ответить с цитированием
Старый 13.03.2010, 19:53   #18
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

да и не надо это понимать, просто поверь что эти сериализации сохраняют всё и вся
после восстановления из файла будет тот же объект(или массив объектов) что и раньше, точная копия

в данном случае наверно нужно загружать при запуске все настройки, а перед выходом сохранять
m0nax вне форума Ответить с цитированием
Старый 13.03.2010, 20:40   #19
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от m0nax Посмотреть сообщение
в данном случае наверно нужно загружать при запуске все настройки, а перед выходом сохранять
В общем я в курсе, что так нужно делать Меня больше интересует, почему у меня возникает такая ошибка, в прошлых постах всё описано, нет смысла дублировать посты. Я на других форумах читал про какие-то XmlAttributes но так и не понял для чего это и как использовать. Может есть способ сохранить по другому как нибудь? Или всё-таки кто знает из-за чего возникает такая ошибка?
Цитата:
Возникла ошибка при отражении типа "System.Collections.Generic.Lis t`1[WindowsFormsApplication1.AlarmClock]".
=================================== =====

Вот набросал примерчик, вот в нём всё та же ошибка что и в моей программе

=================================== =====

Последний раз редактировалось Casper-SC; 13.03.2010 в 21:53.
Casper-SC вне форума Ответить с цитированием
Старый 13.03.2010, 22:01   #20
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

сериализация сохраняет содержимое класса со структурой.
десериализация загружает из файла содержимое класса сохраняя структуру

я бы всё-таки сделал класс с параметрами в конструкторе. и сохранял бы тогда тоже уже по другому.
ещё раз посмотри мой пример. там класс с параметрами. посмотри как я сохраняю список в класс и как загружаю
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать двумерный массив, заполнить случайными числами, сохранить в файл buba Паскаль, Turbo Pascal, PascalABC.NET 7 17.03.2015 20:08
Передать массив базового абстрактного класса функциям производных классов mishutka999 Общие вопросы C/C++ 2 01.12.2009 14:08
запись классов в бинарный файл Feannewedd Общие вопросы C/C++ 6 29.06.2009 10:11
Массив классов nns2009 Общие вопросы C/C++ 15 03.02.2009 00:47