2016-05-07 3 views
0

Я динамически создаю списки в своей программе, и я хочу что-то сделать с ними в другом методе, но это дает мне исключение NullReferenceException. Что мне делать? (Я shortned Кодекса много, поэтому некоторые вещи могут отсутствовать)C# NullReferenceException с несколькими методами

EDIT: я добавил код для инициализации ListBox и текстовое поле

string tabTitle { get; set; } 

    public void newTabButton_Click(object sender, EventArgs e) 
    { 
      TextBox textBoxJan = new TextBox(); 
      textBoxJan.KeyDown += new KeyEventHandler(textBoxJan_KeyDown); 

      ListBox LBJan = new ListBox(); 

      tabControl1.TabPages.Add(tabPage); 
      tabPage.Controls.Add(textBoxJan); 
      tabPage.Controls.Add(LBJan); 
    } 

    public ListBox LBJan; 
    public Label sumLabel; 

    public void textBoxJan_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      if (sender is TextBox) 
      { 
       TextBox textBoxJan = (TextBox)sender; 
       LBJan.Items.Add(textBoxJan.Text) 
      } 
     } 
    } 

ответ

0

Вы не инициализируется переменная правильно:

public void newTabButton_Click(object sender, EventArgs e) 
    { 
      TextBox textBoxJan = new TextBox(); 
      textBoxJan.KeyDown += new KeyEventHandler(textBoxJan_KeyDown); 

      ListBox LBJan = new ListBox(); 
    } 

    public ListBox LBJan; 

LBJAN необходимо установить в newTabButton_click, а не в новую переменную. должно быть:

public void newTabButton_Click(object sender, EventArgs e) 
    { 
      TextBox textBoxJan = new TextBox(); 
      textBoxJan.KeyDown += new KeyEventHandler(textBoxJan_KeyDown); 

      this.LBJan = new ListBox(); 
    } 

    public ListBox LBJan; 

Если вы хотите хранить данные, то вы можете использовать метод тегов из текстового поля для хранения данных. вы можете затем извлечь объект позже в других событиях.

https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag(v=vs.110).aspx

+0

Так я добавил код для инициализации, но, как я – Ziggster

+0

У вас возникла проблема, что каждое созданное текстовое поле будет запускать одно и то же событие. Следовательно, установите текстовое поле. Метка = LBJan ;. Теперь в событии с ключом вы можете получить объект LBJan из тега и добавить к нему элемент. – Avneesh

1

Вы создаете новый местного ListBox каждый раз, когда вы обрабатываете событие щелчка, так что ваши глобальные LBJan всегда будет нулевым.

Либо инициализирует окно списка:

public ListBox LBJan = new ListBox(); 

или иметь чек на нуль в обработчике событий и только создать его когда-то:

if (LBJan == null) LBJan = new ListBox(); 
Смежные вопросы