以编程方式选择listView项不起作用

时间:2013-03-09 22:44:06

标签: c# windows listview visual-studio-2012

我在Windows窗体应用程序PaymentInfo中有一个方法,它在填充listView后填充listView1中子项的标签:

internal void PaymentInfo()
{
        label3.Text = "Amount Paid: " + listView1.SelectedItems[0].SubItems[1].Text.ToString();
        label3.Refresh();
        label6.Text = "Payment Type: " + listView1.SelectedItems[0].SubItems[5].Text.ToString();
        label6.Refresh();
}

填充listView1时,我尝试使用以下方法调用该方法:

 listView1.Items[0].Selected = true;
 listView1.Items[0].Focused = true;
 PaymentInfo();

这有效地选择了列表中的第一项,但是当它尝试运行PaymentInfo时,我在ArgumentOutOfRangeException开始的行中得到一个label3.Text,其详细信息为

  

“InvalidArgument ='0'的值对'index'无效。”

我也用listView1_MouseClick调用PaymentInfo,它运行正常。我检查了其他一些事情,并注意到即使我以编程方式选择项目,SelectedItems.Count也会返回0。为什么会这样?谢谢!

1 个答案:

答案 0 :(得分:1)

不确定原因,但唯一可行的方法是将代码放入Load事件中。

private void PastPayment_Load(object sender, EventArgs e)
    {
        listView1.Items[0].Selected = true;
        listView1.Items[0].Focused = true;
        PaymentInfo();
        PopDetails();
        this.listView1.SelectedIndexChanged += listView1_SelectedIndexChanged;
    }