0

我编写代码以显示从一个列表到另一个列表的任何进程,但出现错误!我错过了什么?

private void lsvproccess_SelectedIndexChanged(object sender, EventArgs e)
{
    lsvitems.Items.Clear();
    ListView lsvview = new ListView();
    int index = lsvview.FocusedItem.Index;  /*( get error in run time )*/

    Process p = new Process();
    p = (Process)process_array[index];

    Detail_process(p);    // detailing each process in right side listview
    try
    {
        // calling Get_modules() method to acquire whole modules 
        // cooperating in this process
        if (chbxmodule.Checked)
            Get_modules(p.Modules);
    }
    catch (Win32Exception err)
    {
        MessageBox.Show(err.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
4

5 回答 5

1

我不完全确定我理解你想要做什么,但我很确定这是因为你试图在你刚刚实例化的 ListView 上设置焦点项目的索引。

尽管如此,如果没有更好地了解您要完成的工作,我认为我无法在解决问题的方式上提供更多。

于 2013-03-30T17:01:52.703 回答
1

你在这里创建了一个新的 listItem

 ListView lsvview = new ListView();
 int index = lsvview.FocusedItem.Index;

然后尝试从这个空列表中获取所选项目,这是错误的原因。

于 2013-03-30T17:12:52.007 回答
0
private void lsvproccess_SelectedIndexChanged(object sender, EventArgs e)
{
    lsvitems.Items.Clear();
    ListView lsvview = new ListView();
    if (lsvview.FocusedItem != null) { // <-- google "C# null reference"
        int index = lsvview.FocusedItem.Index;

        Process p = new Process();
        p = (Process)process_array[index];

        Detail_process(p);    // detailing each process in right side listview
        try
        {
            // calling Get_modules() method to acquire whole modules 
            // cooperating in this process
            if (chbxmodule.Checked)
                Get_modules(p.Modules);
        }
        catch (Win32Exception err)
        {
            MessageBox.Show(err.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}
于 2013-03-30T17:11:33.240 回答
0

你已经清除了你的清单。我想你想看看下面的代码

请删除以下行

lsvitems.Items.Clear();
    ListView lsvview = new ListView();
于 2013-03-30T17:19:35.520 回答
0

线

int index=lsvview.FocusedItem.Index;  /*( get error in run time )*/

应该

int index=lsvproccess.FocusedItem.Index;

这是根据您的事件:lsvproccess_SelectedIndexChanged

这个事件是因为你改变了它的项目的选择而触发的,所以lsvproccess会有一个FocusedItem,那么你不应该得到 NRE。

除非您专门更改了事件的名称。

于 2013-03-30T17:15:45.520 回答