我编写代码用于显示从一个列表到另一个列表的任何进程,但是会出错!我错过了什么?
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);
}
}
答案 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();