0

我在我的程序中动态创建列表框,我想用另一种方法对它们做一些事情,但它给了我 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)
            }
        }
    }
4

2 回答 2

1

每次处理单击事件时,您都在创建一个新的本地LBJanListBox,因此您的全局始终为空。

要么初始化列表框:

public ListBox LBJan = new ListBox();

或者在您的事件处理程序中检查 null 并且只创建一次:

if (LBJan == null) LBJan = new ListBox();
于 2016-05-07T16:43:07.073 回答
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;

如果要保存数据,可以使用文本框的 Tag 方法来保存数据。然后,您可以稍后在其他事件中检索该对象。

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

于 2016-05-07T16:41:55.927 回答