Пишу клас, работающий с файлом настроек. Сами настройки хранятся в отдельном объекте. При изменении полей в этом объекте должно запускаться событие, которое будет обрабатывать клас, работающий с файлом настроек.
Делегат:
| Код | 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(); } }
|
С событиями только начал разбираться. Никак не могу понять, как избавиться от ошибки.
з.ы. Надеюсь я не полную дурь написал? |