2016-05-07 23 views
0

我在我的程序中动态创建列表框,我想在另一个方法中与他们做一些事情,但它给了我NullReferenceException异常。我该怎么办? (我shortned代码很多,所以有些事情可能会丢失)C#NullReferenceException与多个方法

编辑:我添加的代码用于初始化列表框和文本框

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

您正在创建一个新的本地列表框每次处理click事件的时间,所以您的全球LBJan总是要为空。

要么初始化列表框:

public ListBox LBJan = new ListBox(); 

,或对空支票在事件处理,只创建了一次:

if (LBJan == null) LBJan = new ListBox(); 
相关问题