在运行时获得错误

本文关键字:错误 运行时 | 更新日期: 2023-09-27 18:06:51

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

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);
    }
}

在运行时获得错误

我不完全确定我理解你在做什么,但我很确定这是由于你正试图将一个焦点项目的索引设置在你刚刚实例化的ListView上。

但是,如果没有更好地了解您想要完成的任务,我认为我不能在解决问题的方式上提供更多的帮助。

您已经在这里创建了一个新的listItem

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

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

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);
        }
    }
}

你已经清空了你的清单。我认为你想要看到下面的代码

请删除下面的行

lsvitems.Items.Clear();
    ListView lsvview = new ListView();

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

int index=lsvproccess.FocusedItem.Index;

根据您的事件:lsvproccess_SelectedIndexChanged

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

除非您特别更改了事件的名称。