2013-12-06 3 views
0

Я хочу написать программу, которая как-то похожа на конструктор, где пользователь может добавить текстовое поле в форму, и все, что пользователь может помещать в эти текстовые поля, можно сохранить (например, настройку) и после закрытия и снова открывая форму, текст текстовых полей будет изменен без изменений., используя массив настроек в C#

, поэтому я решил создать настройку в настройках проекта->, а затем создать его в своем коде. , но всякий раз, когда я хочу, чтобы получить доступ моих настроек это дает мне исключение:

«Необработанное исключение типа„System.NullReferenceException“произошло в FormDesigner.exe»

вот мой код из определения массива:

Settings[] formsetting=new Settings[3]; 

и вот мой код для обработки TextChanged события для everytext поля: (я использую тег для полого ввода соответствует индексу настроек с каждым текстовым полем)

void t_TextChanged(object sender, EventArgs e) 
     { 
      TextBox temp = (TextBox)sender; 
      int s =(int) temp.Tag; 
      string str = temp.Text; 
      frmsetting[s].text = str; 
     } 

Последняя строка, где я получаю сообщение об ошибке.

может кто-нибудь объяснить мне, в чем проблема и как это исправить? , и если мой путь неправильный, вы могли бы показать мой другой способ сделать это. thanks

+0

Какая ошибка? –

+0

вы можете отлаживать и проверять, имеет ли 'str' что-либо, а' temp.Text' возвращает допустимое значение? – SajjadHashmi

+1

Я не вижу, где вы на самом деле заполняете массив. Вы его правильно заполняете? 'frmsetting [s]' всегда будет «null», если вы не установите его ни на что. – TyCobb

ответ

4

Вы не инициализировали объекты в массиве.

Делать это:

Settings[] formsetting = new Settings[3]; 

..creates массив. Все 3: null. Сделайте это:

var formsetting = new Settings[3] { 
    new Settings(), 
    new Settings(), 
    new Settings() 
}; 
+0

спасибо, что была проблема. Это решение сейчас. – user3003613

3

Пока вы инициализируете свой массив, вы фактически не инициализируете ни одно из значений. То, что вы в настоящее время эквивалентно следующему:

Settings[] formsetting=new Settings[3]; 
formsetting[0] = null; 
formsetting[1] = null; 
formsetting[2] = null; 

Вы должны инициализировать значение в индексе вы хотите использовать, прежде чем делать что-нибудь с ним.

Смежные вопросы