C# 使用上下箭头键获取列表视图中关注的项目
我希望从listview中获取所选项目,但不是通过单击它,因为我已经有了一个函数来实现这一点。我想用我的上下箭头来做这件事 我已经有了一个方法,但它抛出了一个异常,有人能帮助重构这个吗?以下是方法C# 使用上下箭头键获取列表视图中关注的项目,c#,listview,selecteditem,keydown,keyup,C#,Listview,Selecteditem,Keydown,Keyup,我希望从listview中获取所选项目,但不是通过单击它,因为我已经有了一个函数来实现这一点。我想用我的上下箭头来做这件事 我已经有了一个方法,但它抛出了一个异常,有人能帮助重构这个吗?以下是方法 private void lvViewFile_KeyDown(object sender, KeyEventArgs e) { ListView lvTemp = (ListView)sender; if (e.KeyCode == Keys.Up) { if
private void lvViewFile_KeyDown(object sender, KeyEventArgs e)
{
ListView lvTemp = (ListView)sender;
if (e.KeyCode == Keys.Up)
{
if (lvTemp.Focused == true)
{
var selected = this.lvCategory.SelectedItems[0].Focused;
}
}
else if (e.KeyCode == Keys.Down)
{
if (lvTemp.Focused == true)
{
var selected = this.lvCategory.SelectedItems[0].Focused;
}
}
}
这似乎正是我想要的
if (e.KeyCode == Keys.Up)
{
if (lvTemp.Focused == true)
{
var selected = lvTemp.FocusedItem.Index;
if (selected.Equals(0))
{
enableMoveDown();
}
else if (selected.Equals(lvCategory.Items.Count - 1))
{
enableMoveUp();
}
else
{
enableMoveUpMoveDown();
}
}
}
else if (e.KeyCode == Keys.Down)
{
if (lvTemp.Focused == true)
{
var selected = lvTemp.FocusedItem.Index;
if (selected.Equals(0))
{
enableMoveDown();
}
else if (selected.Equals(lvCategory.Items.Count - 1))
{
enableMoveUp();
}
else
{
enableMoveUpMoveDown();
}
}
}
这似乎正是我想要的
if (e.KeyCode == Keys.Up)
{
if (lvTemp.Focused == true)
{
var selected = lvTemp.FocusedItem.Index;
if (selected.Equals(0))
{
enableMoveDown();
}
else if (selected.Equals(lvCategory.Items.Count - 1))
{
enableMoveUp();
}
else
{
enableMoveUpMoveDown();
}
}
}
else if (e.KeyCode == Keys.Down)
{
if (lvTemp.Focused == true)
{
var selected = lvTemp.FocusedItem.Index;
if (selected.Equals(0))
{
enableMoveDown();
}
else if (selected.Equals(lvCategory.Items.Count - 1))
{
enableMoveUp();
}
else
{
enableMoveUpMoveDown();
}
}
}
这是一篇老文章,但我修改了接受的答案,以便在使用箭头键浏览ListView时显示数据库中的数据。这可能对其他人有帮助:
ListView lv = sender as ListView;
if (lv.Focused) // which it should be as the user is running arrow keys on it!
{
int selected = lv.FocusedItem.Index; // gets the index of the CURRENT ListViewItem (Not the one you see highlighted after arrow key movement)
switch (e.KeyCode) // Can use if/else here if preferred
{
case Keys.Up:
//Change index to the row above the current one
selected--;
if(selected < 0) //check if already on the first row
{
selected = 0;
}
break;
case Keys.Down:
//Change index to the row below the current one
selected++;
if(selected > lv.Items.Count - 1) //check if index out of range
{
selected = lv.Items.Count - 1;
}
break;
}
// Carry out your choice of action. (This one reads a database and fills fields)
FillFields(lvClients.Items[selected].SubItems[0].Text);
}
ListView lv=发送方作为ListView;
if(lv.Focused)//当用户在它上面运行箭头键时,它应该是哪个!
{
int selected=lv.FocusedItem.Index;//获取当前ListViewItem的索引(不是在箭头键移动后突出显示的索引)
开关(e.KeyCode)//如果愿意,可以在此处使用if/else
{
案例密钥。向上:
//将索引更改为当前索引上方的行
选定--;
if(selected<0)//检查是否已在第一行
{
所选=0;
}
打破
案例键。向下:
//将索引更改为当前索引下的行
选定++;
if(selected>lv.Items.Count-1)//检查索引是否超出范围
{
所选=lv.Items.Count-1;
}
打破
}
//执行您选择的操作。(此操作读取数据库并填充字段)
填充字段(lvClients.Items[selected]。子项[0]。文本);
}
这是一篇老文章,但我修改了接受的答案,以便在使用箭头键浏览列表视图时显示数据库中的数据。这可能对其他人有帮助:
ListView lv = sender as ListView;
if (lv.Focused) // which it should be as the user is running arrow keys on it!
{
int selected = lv.FocusedItem.Index; // gets the index of the CURRENT ListViewItem (Not the one you see highlighted after arrow key movement)
switch (e.KeyCode) // Can use if/else here if preferred
{
case Keys.Up:
//Change index to the row above the current one
selected--;
if(selected < 0) //check if already on the first row
{
selected = 0;
}
break;
case Keys.Down:
//Change index to the row below the current one
selected++;
if(selected > lv.Items.Count - 1) //check if index out of range
{
selected = lv.Items.Count - 1;
}
break;
}
// Carry out your choice of action. (This one reads a database and fills fields)
FillFields(lvClients.Items[selected].SubItems[0].Text);
}
ListView lv=发送方作为ListView;
if(lv.Focused)//当用户在它上面运行箭头键时,它应该是哪个!
{
int selected=lv.FocusedItem.Index;//获取当前ListViewItem的索引(不是在箭头键移动后突出显示的索引)
开关(e.KeyCode)//如果愿意,可以在此处使用if/else
{
案例密钥。向上:
//将索引更改为当前索引上方的行
选定--;
if(selected<0)//检查是否已在第一行
{
所选=0;
}
打破
案例键。向下:
//将索引更改为当前索引下的行
选定++;
if(selected>lv.Items.Count-1)//检查索引是否超出范围
{
所选=lv.Items.Count-1;
}
打破
}
//执行您选择的操作。(此操作读取数据库并填充字段)
填充字段(lvClients.Items[selected]。子项[0]。文本);
}
您在哪一行收到什么类型的异常<代码>NullReferenceException在此行var selected=this.lvCategory.SelectedItems[0]。聚焦代码>?我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。在哪一行,你会得到什么类型的例外<代码>NullReferenceException
在此行var selected=this.lvCategory.SelectedItems[0]。聚焦代码>?我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。