如何保持对Listview SelectedIndexChanged的保护

时间:2012-05-31 12:35:19

标签: c# visual-studio

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{

     ListView lv = (ListView)sender;
     textBox2.Text = lv.FocusedItem.SubItems[3].Text;
     textBox3.Text = lv.FocusedItem.SubItems[0].Text;


}

我认为上面的代码不安全,这会在更新listview项目时触发空引用错误,以便其他表单如何确保它能够保持免受Null引用错误的影响?

2 个答案:

答案 0 :(得分:2)

这是一个私有方法,因此除非您从自己的类中执行此操作,否则无法将其作为事件处理程序添加到任何事件中。因此,它不会从您在代码中告诉它的地方接收任何事件。它不会在其他表单上接收ListView控件的事件(除非您指示它执行此操作)。如果您唯一关心的是停止空引用异常,则只需添加检查以查看属性是否为null。当没有FocusedItem时,您自己表单上的ListView控件仍然可能引发事件,或者焦点项目没有每个预期的子项目。因此,为了完全安全,你可以这样做:

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (sender != null)
    {
        ListView lv = (ListView)sender;
        if ((lv.FocusedItem != null) && (lv.FocusedItem.SubItems.Count >= 4))
        {
            textBox2.Text = lv.FocusedItem.SubItems[3].Text;
            textBox3.Text = lv.FocusedItem.SubItems[0].Text;
        }
    }
}

答案 1 :(得分:1)

您应该检查焦点项目中是否有4个子项目,如下所示:

 ListView lv = (ListView)sender;
 if (lv.FocusedItem != null && lv.FocusedItem.SubItems.Count > 3)
 {
   textBox2.Text = lv.FocusedItem.SubItems[3].Text;
   textBox3.Text = lv.FocusedItem.SubItems[0].Text;
 }