【问题标题】:listbox and search returning null列表框和搜索返回 null
【发布时间】:2013-10-16 10:59:52
【问题描述】:

我有一个搜索功能,在我第一次运行时效果很好。当我尝试添加新搜索时,程序会关闭并显示错误消息: “markerat = listBoxSökResultat.SelectedItem.ToString().ToLower(); 对象引用未设置为对象的实例。NullReference。 我试过使用 if 和 return;但这似乎没有帮助。有人知道这里有什么问题吗?

private void buttonSökNamn_Click(object sender, EventArgs e)
        {

            listBox1.Items.Clear();
            var v = (from x in el.Descendants("recept")
                     where x.Element("namn").Value.ToLower().Contains(textBoxNamn.Text.ToLower())
                     select x);

            if (v == null)
            {
                MessageBox.Show("Finns inte!");
                return;
            }

            foreach (var item in v.Elements("namn"))
            {
                Sökresultat.Add(item.Value);                
            }
            listBoxSökResultat.DataSource = null;
            listBoxSökResultat.DataSource = Sökresultat;

        }

        private void listBoxSökResultat_SelectedIndexChanged(object sender, EventArgs e)
        {
            string markerat;


            markerat = listBoxSökResultat.SelectedItem.ToString().ToLower();
            if (markerat == null) return;
            listBox1.Items.Clear();
            if (listBoxSökResultat.SelectedItems.Count == 0) return;
            var v = (from x in el.Descendants("recept")
                     where x.Element("namn").Value.ToLower() == markerat
                     select x).FirstOrDefault();

            if (v == null)
            {
                MessageBox.Show("Finns inte!");
                return;
            }

            textBoxNamn.Text = v.Element("namn").Value;
            listBox1.Items.Add(v.Element("portioner").Value);

            var test = v.DescendantsAndSelf("ingrediens").ToList();
            foreach (var item in test)
            {
                listBox1.Items.Add(item.Value);
            }

            var test2 = v.DescendantsAndSelf("steg").ToList();
            foreach (var item in test2)
            {
                listBox1.Items.Add(item.Value);
            }

        }

【问题讨论】:

    标签: c# winforms search listbox


    【解决方案1】:

    listBoxSökResultat.SelectedItemnull,因此任何进一步的调用 (.ToString()) 都会导致该异常。您当前检查的不是null 并且 SelectedItemscount 高于0,但之后出现了问题。到那时为时已晚。防御性检查很棒,但你做得太晚了。

    SelectedItem 将是null 如果当时没有选中的项目,所以你应该先检查那个

    if (listBoxSökResultat.SelectedItem != null)
    {
        markerat = listBoxSökResultat.SelectedItem.ToString().ToLower();
    }
    

    这会让你通过这个特定的问题。

    【讨论】:

    • 谢谢,您的解决方案有效。但我用这个代替 listBoxSökResultat.SelectedIndexChanged -= listBoxSökResultat_SelectedIndexChanged;然后在底部我只使用了 +=
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2019-10-11
    • 1970-01-01
    相关资源
    最近更新 更多