通过在ListView中选择项目来填充组合框

时间:2013-07-02 21:05:23

标签: c# listview selectedindexchanged

我尝试使用方法combobox更改arraylist中的选择时,从listview中的一个listView1_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; } }

请帮忙。

{{1}}

1 个答案:

答案 0 :(得分:0)

您的示例中是否还有其他影响listView1项的内容?我已经嘲笑了你的问题的一个小克隆,我似乎无法复制错误:

我正在使用你的代码作为事件处理程序,我正在填充listView1

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

听起来你正在导致listView1_SelectedIndexChanged处理程序在后台被解雇。

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

关于最后一点,同样值得查看ItemSelectionChanged事件,该事件可用于帮助解决您的初始问题,因为ListViewItemSelectionChangedEventArgs包含属性IsSelected },您可以用它来验证您是否选择了一个对象。

e.g:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
    {
        if (e.IsSelected)
        {
            // Your code here.
            // e.Item...
        }
    }