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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 03:18   #1
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию Сохранение/загрузка значений тексбокс при закрытии/открытии формы

Добрый день.
При закрытии формы сохраняю данные со всех текст боксов и вызываю их при запуске программы. Выкидывает ошибку. Не могу разобратся.
System.NullReferenceException не обработано
Message=Ссылка на объект не указывает на экземпляр объекта.

В Properties - настройки
Textbox System.Collections...

Код:
    public partial class Form1 : Form
    {
        public Color[][] arrPixelColor = new Color[13][];         
        TextBox[] TBox1 = new TextBox[20];
        TextBox[] TBox2 = new TextBox[20];

        public Form1()
        {
            InitializeComponent();
            timer1.Start();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Properties.Settings.Default.Textbox.Clear();
            TextBox[] TBox1 = new TextBox[] { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8, textBox9, textBox10, textBox11, textBox12, textBox13, textBox14, textBox15, textBox16, textBox17, textBox18, textBox19 };
            for (int i = 0; i < 19; i++)
            {           
                Properties.Settings.Default.Textbox.Add(TBox1[i].Text);
            }

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            if (Properties.Settings.Default.Textbox != null)
            {
                TextBox[] TBox2 = new TextBox[] { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8, textBox9, textBox10, textBox11, textBox12, textBox13, textBox14, textBox15, textBox16, textBox17, textBox18, textBox19 };
                for (int i = 0; i < Properties.Settings.Default.Textbox.Count; i++)
                {
                    TBox2[i].Text = Properties.Settings.Default.Textbox[i].ToString();
                }
            }
        }

Последний раз редактировалось SaNeKBF; 15.05.2011 в 04:05.
SaNeKBF вне форума Ответить с цитированием
Старый 15.05.2011, 10:20   #2
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Подобная ошибка разве что в этой строке может быть:
Код:
TBox2[i].Text = Properties.Settings.Default.Textbox[i].ToString();
Если в Textbox[i] оказалось null, то ToString() конечно не сделаешь.

Как я понимаю, все текстовые поля на форме лежат? Самое интересное будет тогда, когда ещё одно поле добавится
Собирать значения можно примерно так:
Код:
Properties.Settings.Default.Textbox.Clear();
            TextBox[] TBox1 = this.Controls.OfType<TextBox>().ToArray();
            for (int i = 0; i < TBox1.Length; i++)
            {           
                Properties.Settings.Default.Textbox.Add(TBox1[i].Text);
            }
Spawn™Production® вне форума Ответить с цитированием
Старый 15.05.2011, 12:19   #3
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Что-то не пойму где напартачил )
Если не сложно, посмотрите проект с реализацией вашего предложения )
Вложения
Тип файла: rar WindowsFormsApplication1.rar (40.9 Кб, 73 просмотров)
SaNeKBF вне форума Ответить с цитированием
Старый 15.05.2011, 17:34   #4
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Воть...
Код:
        private void Form1_Load(object sender, EventArgs e)
        {
            TextBox[] TBox2 = this.Controls.OfType<TextBox>().ToArray();
            if (Properties.Settings.Default.Textbox != null)
            {
                for (int i = 0; i < Properties.Settings.Default.Textbox.Count; i++)
                    TBox2[i].Text = Properties.Settings.Default.Textbox[i].ToString();
            }
            else
            {
                Properties.Settings.Default.Textbox = new System.Collections.Specialized.StringCollection();
                Properties.Settings.Default.Textbox.AddRange(Enumerable.Repeat<string>("", TBox2.Length).ToArray());
                Properties.Settings.Default.Save();
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (Properties.Settings.Default.Textbox != null)
                Properties.Settings.Default.Textbox.Clear();
            TextBox[] TBox1 = this.Controls.OfType<TextBox>().ToArray();
            for (int i = 0; i < TBox1.Length; i++)
                if (TBox1[i].Text != "")
                    Properties.Settings.Default.Textbox.Add(TBox1[i].Text);
                else
                    Properties.Settings.Default.Textbox.Add("0");
            Properties.Settings.Default.Save();
        }
Spawn™Production® вне форума Ответить с цитированием
Старый 20.05.2011, 18:23   #5
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Спасибо, очень хороший и очень удачный пример работы )
Все работает.
Возникла другая проблема с загрузкой масива цветов (Color)
Код:
    public partial class Form1 : Form
    {
        public Color[][] arrPixelColor = new Color[13][];
...
Естественно, при первой загрузке масив не заполнен.
Делаю по пример так
Код:
        private void Form1_Load(object sender, EventArgs e)
        {
...
                if (Properties.Settings.Default.ImegRuin != null)
                {
                    for (int i = 0; i < Properties.Settings.Default.ImegRuin.Count; i++)
                        arrPixelColor[0][i] = System.Drawing.ColorTranslator.FromHtml(Properties.Settings.Default.ImegRuin[i]);
                }
                else
                {
                    Properties.Settings.Default.ImegRuin = new System.Collections.Specialized.StringCollection();
                    Properties.Settings.Default.ImegRuin.AddRange(Enumerable.Repeat<string>("", arrPixelColor[0].Length).ToArray());
                    Properties.Settings.Default.Save();
                }

...
}
Код:
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
...
            if (Properties.Settings.Default.ImegRuin != null)
                Properties.Settings.Default.ImegRuin.Clear();
            TextBox[] TBox1 = this.Controls.OfType<TextBox>().ToArray();
            for (int i = 0; i < arrPixelColor[0].Length; i++)
                if (arrPixelColor[0][i] != null)
                    Properties.Settings.Default.ImegRuin.Add(System.Drawing.ColorTranslator.ToHtml(arrPixelColor[0][i]));
                else
                    Properties.Settings.Default.ImegRuin.Add("0");
            Properties.Settings.Default.Save();
...
}
System.NullReferenceException не обработано
Message=Ссылка на объект не указывает на экземпляр объекта.
Ругается вот на эту строку
Код:
arrPixelColor[0][i] = System.Drawing.ColorTranslator.FromHtml(Properties.Settings.Default.ImegRuin[i]);
В общем запутался. И так, и сяк не могу правильно построить условие %)
SaNeKBF вне форума Ответить с цитированием
Старый 20.05.2011, 19:53   #6
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

вместо
Код:
public Color[][] arrPixelColor = new Color[13][];
попробуйте
Код:
public Color[][] arrPixelColor = new Color[13][50];
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 20.05.2011, 20:28   #7
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Сложные масивы обьявляются в 2 этапа.
Цитата:
public Color[][] arrPixelColor = new Color[13][];
потом в скрипте
Цитата:
arrPixelColor[a] = new Color[13];
Как это сделать в начале скрипта, я без понятия ))
Так вот нельзя
Цитата:
public Color[][] arrPixelColor = new Color[13][50];
SaNeKBF вне форума Ответить с цитированием
Старый 20.05.2011, 22:42   #8
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Код:
Color[,] arrPixelColor = new Color[13,50];
Spawn™Production® вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрытие панелей инструментов при открытии и отображение при закрытии документа Василий. Microsoft Office Word 0 23.10.2010 00:41
Сохранение и загрузка в файл текстовых значений и значений типа Boolean krikaved Общие вопросы Delphi 1 16.03.2010 07:53
Отловить событие при открытии/закрытии дисковода k1r1ch Общие вопросы Delphi 4 06.10.2009 13:52
сохранение файла при закрытии robotov Microsoft Office Excel 23 18.09.2009 10:40
Автозапуск макроса при открытии и закрытии книги ruavia3 Microsoft Office Excel 8 06.04.2009 11:09