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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 00:07   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию Экземпляр класса с.делать доступным везде

Я использую в программе вместо стандартного settings.settings свой класс. Как мне сделать так, чтобы один экземпляр класса был видел любой форме, то есть, чтобы например Form1 прочитал из экземпляра какие-то параметры, тут я открываю другую форму и та тоже из этого экземпляра читает параметры. Такое вообще возможно?
Casper-SC вне форума Ответить с цитированием
Старый 08.04.2010, 01:31   #2
Arnezami
Форумчанин
 
Регистрация: 04.10.2009
Сообщений: 147
По умолчанию

Конечно возможно! Делаете свой класс и его Property static, и даже экземпляры делать не нужно! Класс для всего приложения будет содержать установленые вами в любом месте параметры!
Ув. Форумчане! Если мои советы были Вам полезны, не забывайте благодарить в виде повышение рейтинга!!!
http://vkontakte.ru/id6715558

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

Вот уже сделал, так он теперь сохраняет всё, а грузить не хочет, что-то не пойму почему:

Код:
    [Serializable]
    public class ApplicationSettings
    {
        //Свойства
        public Color ColorBackScreen; //Цвет фона окна на котором выделяют область
        public Color ColorLinesRect;  //Цвет прямоугольной рамки выделения

        public Point MainWindowPosition;

        public Boolean SaveScreenshotsInDefFolder; //ФЛАГ сохранять ли скришнот в папку по умолчанию

        public String DefaultFolderForScreenshots; //папка для сохранения скриншотов по умолчанию

        public ScreenshotFormat ScreenImageFormat; 

        public ApplicationSettings()
        {
            ColorBackScreen = Color.WhiteSmoke; 
            ColorLinesRect = Color.Red;  

            MainWindowPosition = new Point(Screen.PrimaryScreen.Bounds.Width / 2,
                Screen.PrimaryScreen.Bounds.Height / 2);

            SaveScreenshotsInDefFolser = true;

            DefaultFolderForScreenshots = String.Empty;

            ScreenImageFormat = ScreenshotFormat.BMP;
        }
    }

    public class GlobalSettings
    {
        public static ApplicationSettings appSettings = new ApplicationSettings();

        public static void SaveSettings(ApplicationSettings config)
        {
            IFormatter binaryFormatter = new BinaryFormatter();
            Stream stream = new FileStream(Application.StartupPath + "\\" + "Settings.bin",
                FileMode.Create, FileAccess.Write, FileShare.None);
            binaryFormatter.Serialize(stream, config);
            stream.Close();

        }

        public static void LoadSettings(ApplicationSettings config)
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(Application.StartupPath + "\\" + "Settings.bin",
                FileMode.Open, FileAccess.Read, FileShare.None);
            config = (ApplicationSettings)formatter.Deserialize(stream);
            stream.Close();
        }
    }
Использую так:
При сохранении:
Код:
GlobalSettings.SaveSettings(GlobalSettings.appSettings);
При загрузке:
Код:
GlobalSettings.LoadSettings(GlobalSettings.appSettings);

            //==================настраиваем вкладку "Скриншоты"========================

            this.pictureBoxBack.BackColor = GlobalSettings.appSettings.ColorBackScreen;
            this.pictureBoxRect.BackColor = GlobalSettings.appSettings.ColorLinesRect;

            if (GlobalSettings.appSettings.SaveScreenshotsInDefFolder)
                this.radBtnSaveDefaultFolder.Checked = true;
            else
                this.radBtnselectDirectory.Checked = true;
Вообще беда, вся работа встала, надо именно с одним экземпляром работать, для простоты доступа из любой формы.

Последний раз редактировалось Casper-SC; 08.04.2010 в 10:59.
Casper-SC вне форума Ответить с цитированием
Старый 08.04.2010, 01:50   #4
Arnezami
Форумчанин
 
Регистрация: 04.10.2009
Сообщений: 147
По умолчанию

Блин а что про статик поля почитать впадлу? Это 3-я страница шарпов! Во вторых, если хочешь чтобы поля сохранялись юзай умные указатели:

Код:

 private Color _ColorBackScreen {set; get;}
 public Color ColorBackScreen 
{
        set 
        {             
              _ColorBackScreen = (value != null) ? value : Color.Red;             
        } 
        get
        {
              return _ColorBackScreen;
        }
} //Цвет фона окна на котором выделяют область
Такой приём называется Синглтон и эта штука будет запоминать и получать данные! Если юзаешь многопоточность - обезопасить нужно локером!
Ув. Форумчане! Если мои советы были Вам полезны, не забывайте благодарить в виде повышение рейтинга!!!
http://vkontakte.ru/id6715558

Последний раз редактировалось Arnezami; 08.04.2010 в 02:00.
Arnezami вне форума Ответить с цитированием
Старый 08.04.2010, 02:12   #5
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Спасибо конечно, но дело было не в этом и раньше где бы я не писал без синглтонов (если я вообще правильно понял, что это) всё сохранялось и загружалось. Дело было в том, что:

Это:
Код:
public static void LoadSettings(ApplicationSettings config)
Надо было изменить на:
Код:
public static void LoadSettings(ref ApplicationSettings config)

Последний раз редактировалось Casper-SC; 08.04.2010 в 02:18.
Casper-SC вне форума Ответить с цитированием
Старый 08.04.2010, 10:07   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Обычно разумнее делать так, но Вам виднее
Код:
public static ApplicationSettings LoadSettings()
как вариант конечно, я просто так всегда делаю.
Причем еще вариант, в каждом свойстве ( как выше описано ), добавить проверку, если AppSettings еще не загружены, загрузить. Т.е. LoadSettings не придется руками в коде программы вызывать, он будет автоматом загружен при первом обращении к какому-либо из свойств.
BOBAH13 вне форума Ответить с цитированием
Старый 08.04.2010, 10:55   #7
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Да, да всё верно, так разумнее. но я эти методы просто уйму раз переделывал, пока они заработали. До этого я использовал стандартный settings.settings, так вот я поудалял все свойства из него, когда перестал его использовать, а вот забинденые свойства остались с ошибкой, но компилятор при компиляции ничего не писал. Короче рабочие методы не работали благодаря, тому, что я забыл убрать забинденые свойства некоторых компонентов и глючила прога, я даже Windows перезагружал, думал, что-то не то с компьютером твориться, так как, то что раньше работало, перестало работать (я про вообще другие методы, не сохранение и загрузка). В итоге не заметил этой мелочи.

Последний раз редактировалось Casper-SC; 08.04.2010 в 11:03.
Casper-SC вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск так, чтобы везде Svap Microsoft Office Excel 5 05.01.2010 16:41
как создать второй экземпляр формы на с++ в vs2008 molodoy-pirat Общие вопросы .NET 1 30.04.2009 09:56
Как написать БД, которая работает везде? =) FeNr1z168 БД в Delphi 6 17.02.2009 08:48
Один экземпляр класса Лубышев Общие вопросы .NET 2 31.10.2008 20:57
Как сделать программу, чтобы она запускалась везде? grenles Общие вопросы C/C++ 3 11.06.2008 21:10