-2
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;


}

我认为上面的代码不安全,这会在通过其他形式更新列表视图项时触发空引用错误,那么如何保护它以防止出现空引用错误?

4

2 回答 2

2

这是一个私有方法,因此它不能作为事件处理程序添加到任何事件中,除非您在自己的类中这样做。因此,它不会从任何地方接收事件,除非您在代码中告诉它。它不会接收其他表单上的 ListView 控件的事件(除非您指示它这样做)。如果您唯一关心的是停止空引用异常,则只需添加检查以查看属性是否为空。当没有 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;
        }
    }
}
于 2012-05-31T12:40:25.337 回答
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;
 }
于 2012-05-31T12:40:46.667 回答