C# 如何在显示列表框元素的属性后上下移动它们?

C# 如何在显示列表框元素的属性后上下移动它们?,c#,C#,我创建了一个代码,当我在列表框中选择一个项目时,该项目的信息将显示在一个文本框中。我也有上下移动按钮来上下移动列表的内容,还有删除按钮来删除所选项目。现在,当我单击该项目时,信息将显示在文本框中,但如果我单击同一项目的“上移”、“下移”或“删除”按钮,则会引发异常,对象引用未设置为对象的实例。引发此异常的行是我在下面的代码中创建ClassName的新对象时: private void lb_SelectedIndexChanged(object sender, EventArgs e)

我创建了一个代码,当我在列表框中选择一个项目时,该项目的信息将显示在一个文本框中。我也有上下移动按钮来上下移动列表的内容,还有删除按钮来删除所选项目。现在,当我单击该项目时,信息将显示在文本框中,但如果我单击同一项目的“上移”、“下移”或“删除”按钮,则会引发异常,对象引用未设置为对象的实例。引发此异常的行是我在下面的代码中创建ClassName的新对象时:

    private void lb_SelectedIndexChanged(object sender, EventArgs e)
    {
        m_Txt.Clear();
        ClassName fileInfo = new ClassName(m_lbOPFfiles.SelectedItem.ToString());
        m_Txt.Multiline = true;
        m_Txt.Text = fileInfo.title + Environment.NewLine + fileInfo.ID + Environment.NewLine + fileInfo.time;

    }
上移按钮的代码为:

    private void m_btnUP_Click(object sender, EventArgs e)
    {            
        if (m_lbOPFfiles.SelectedIndex != 0 && m_lbOPFfiles.SelectedIndex != -1)
        {
          //  m_lbOPFfiles.SelectedItem.
            object item = m_lbOPFfiles.SelectedItem;
            int index = m_lbOPFfiles.SelectedIndex;
            m_lbOPFfiles.Items.RemoveAt(index);

            m_lbOPFfiles.Items.Insert(index - 1, item);
        }         
    }

请告诉我可能的问题和解决方法。

我猜应该在
lb_SelectedIndexChanged
方法的第三行。 您正在调用
SelectedItem
上的
ToString()
,此时它可能为空-删除
m\u btnUP\u Click
方法第7行中的项后,它可能为空-这将引发异常

您可以在异常详细信息中看到它是从哪一行代码抛出的,并像这样指出错误。您还可以逐行调试代码并亲自查看


希望这有帮助。

我猜您的
Items.RemoveAt
调用正在清除选择,导致
SelectedItem
变为
null
,并触发
lb_SelectedIndexChanged
事件,其中
null
导致您描述的问题


我建议您确保在事件处理程序中确实选择了某个项目。

SelectedIndexChanged在选中某个项目时触发,但在“未选中”某个项目时也会触发(如果从列表中删除当前选中的项目,则会发生这种情况)。添加检查以验证是否选择了某个项目:

if (m_lbOPFfiles.SelectedIndex >= 0)  // you can also use m_lbOPFfiles.SelectedItem != null
{
    m_Txt.Clear();
    ClassName fileInfo = new ClassName(m_lbOPFfiles.SelectedItem.ToString());
    m_Txt.Multiline = true;
    m_Txt.Text = fileInfo.title + Environment.NewLine + fileInfo.ID + Environment.NewLine +  fileInfo.time;
}

如果未选择任何项目,则SelectedIndex为-1,SelectedItem为空。

您确实注意到stackoverflow.com上的系统有投票和接受答案吗;o)