1

我试图combobox从两个之一中填充, 用方法arraylist改变选择。问题是它第一次工作正常,但第二次出现以下错误:“对象引用未设置为对象的实例。”listviewlistView1_SelectedIndexChanged

错误可能发生在这里:string pr = listView1.FocusedItem.Text;

请帮忙。

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {

        ArrayList Profesor1 = new ArrayList();
        Profesor1.Add("Kolegij 1 profesor 1");
        Profesor1.Add("Kolegij 2 profesor 1");



        ArrayList Profesor2 = new ArrayList();
        Profesor2.Add("Kolegij 1 profesor 2");
        Profesor2.Add("Kolegij 2 profesor 2");



        string pr = listView1.FocusedItem.Text; //posible prob
        switch (pr)
        {
            case "Profesor 1": comboBox1.DataSource = Profesor1;
                break;
            case "Profesor 2": comboBox1.DataSource = Profesor2;
                break;
        }
    }
4

1 回答 1

0

您的示例中是否还有其他事情影响该listView1项目?我已经模拟了你的问题的一个小克隆,我似乎无法复制错误:

我正在将您的代码用于事件处理程序,并且正在填充以下listView1内容:

        listView1.Items.Add("Profesor 1");
        listView1.Items.Add("Profesor 2");

听起来您正在使listView1_SelectedIndexChanged处理程序在后台被触发。

顺便说一句,您的数组列表不会更改,您可能不想将 ArrayList 创建保留在事件处理程序中并每次都重新创建它们(它们似乎没有任何动态信息)。特别是因为该处理程序通常会被调用两次,一次是取消选择,一次是选择一次。

在最后一点上,还值得看一下ItemSelectionChanged事件,它可以用来帮助您解决最初的问题,因为它ListViewItemSelectionChangedEventArgs 包含属性IsSelected,您可以使用它来验证您是否选择了一个对象。

例如:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
    {
        if (e.IsSelected)
        {
            // Your code here.
            // e.Item...
        }
    }
于 2013-07-02T22:11:23.837 回答