在运行时获取错误

时间:2013-03-30 16:56:43

标签: c# process

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

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

5 个答案:

答案 0 :(得分:1)

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

但是,如果没有更好地理解你想要完成的是什么,我认为我不能在解决问题方面给予更多的帮助。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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);
        }
    }
}

答案 3 :(得分:0)

该行

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

应该是

int index=lsvproccess.FocusedItem.Index;

这是根据您的活动:lsvproccess_SelectedIndexChanged

此事件触发因为您更改了其项目的选择,因此lsvproccess将有FocusedItem,那么您不应该获得NRE。

除非您专门更改了活动的名称。

答案 4 :(得分:0)

你清楚了你的清单。我想你想看到以下代码

请删除以下行

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