Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие 
V
    Опции темы
Unsane
Дата 11.7.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.6.2007

Репутация: 2
Всего: 5



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

Делегат:
Код

public delegate void SettingsChangedEventHandler(object sender, SettingsChangedEventArgs e);

Клас, в котором хранятся настройки:
Код

    [XmlRoot("Settings")]
    public class Settings
    {
        public event SettingsChangedEventHandler SettingsChanged;

        private string _Version = "1.0";
        [XmlAttribute("Version")]
        public string Version
        {
            get { return (string)this._Version; }
            set
            {
                this._Version = value;
                SettingsChangedEventArgs e = new SettingsChangedEventArgs();
                OnSettingsChanged(e);
            }
        }

        public Settings() { }

        protected virtual void OnSettingsChanged(SettingsChangedEventArgs e)
        {
            if (SettingsChanged != null)
            {
                SettingsChanged(this, e);
            }
        }
    }


Управляющий класс(ошибка в 9й строке):
Код

    public class SettingsManager
    {
        private string CONFIG_FILE_PATH = Path.GetDirectoryName(System.Windows.Forms.Application.StartupPath) + "//Settings.cfg";
        public Settings Config = null;
                    
        public SettingsManager()
        {
            this.Load();
            this.Config.SettingsChanged += SettingsChangedEventHandler(this.IfChange); // Тут возникает ошибка 'SMTA.SettingsChangedEventHandler' is a 'type' but is used like a 'variable'

        }

        public void Save()
        {
            try
            {
                XmlSerializer xs = new XmlSerializer(this.Config.GetType());
                Stream fs = new FileStream(this.CONFIG_FILE_PATH, FileMode.Create, FileAccess.Write);
                xs.Serialize(fs, this.Config, new XmlSerializerNamespaces(new XmlQualifiedName[] { new XmlQualifiedName(string.Empty) }));
                fs.Close();
            }
            catch { }
        }

        public void Load()
        {
            try
            {
                XmlSerializer xs = new XmlSerializer(typeof(Settings));
                TextReader tr = new StreamReader(new FileStream(this.CONFIG_FILE_PATH, FileMode.Open, FileAccess.Read));
                this.Config = (Settings)xs.Deserialize(tr);
                tr.Close();
            }
            catch { }
            if (this.Config == null)
                this.Config = new Settings();
        }

        private void IfChange(object sender, SettingsChangedEventArgs e)
        {
            this.Save();
        }
    }


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

з.ы. Надеюсь я не полную дурь написал? smile 

Это сообщение отредактировал(а) Unsane - 11.7.2008, 22:35
--------------------
Я дурак.. Этим и интересен!
PM MAIL   Вверх
mihryak
Дата 11.7.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



просто
Код

this.Config.SettingsChanged += IfChange;

PM MAIL ICQ   Вверх
Bogdan1024
Дата 11.7.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 3
Всего: 13



this.Config.SettingsChanged += new SettingsChangedEventHandler(this.IfChange);
?


--------------------
user posted image
PM MAIL   Вверх
mihryak
Дата 12.7.2008, 00:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Bogdan1024, решарпер традиционно предлагает твой код сократить до моего
та же штука с 
Код

Thread thread = new Thread(ThreadProc);
// вместо
Thread thread = new Thread(new ThreadStart(ThreadProc));


да и вообще с любыми делегатами - можно без создания экземпляра просто передать сам метод

Это сообщение отредактировал(а) mihryak - 12.7.2008, 00:08
PM MAIL ICQ   Вверх
Bogdan1024
Дата 12.7.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 3
Всего: 13



Тоесть, это одно и то же? Ого. Нэ знал smile


--------------------
user posted image
PM MAIL   Вверх
Unsane
Дата 12.7.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.6.2007

Репутация: 2
Всего: 5



Спасибо.. Делал по статье, видимо там из головы код писали, а посмотреть в дизайнере чет не додумался..
--------------------
Я дурак.. Этим и интересен!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.