2012-03-09 83 views
0

当前使用列表框和contextMenuStrip,在项目右键单击后,如何从列表框中检索项目的索引?如何从列表框中获取项目索引

我的功能:

private void contextMenuStripOption1_Click(object sender, EventArgs e) 
{ 
    if (listBoxFiles.SelectedIndex == -1) 
    { 
     return; 
    } 

    Point ptCursor = Cursor.Position; 
    int itemIndex = listBoxFiles.IndexFromPoint(ptCursor); 
} 

删除功能:

private void contextMenuStripDelete_Click(object sender, EventArgs e) 
{ 
    if (listBoxFiles.SelectedIndex == -1) 
    { 
     return; 
    } 

    listBoxFiles.Items.RemoveAt(listBoxFiles.SelectedIndex); 
} 
+1

为什么你不能只使用listBoxFiles.SelectedIndex? – Coltech 2012-03-09 13:29:25

+0

[C#如何选择ListBox项目与RightClick?]的可能重复(http://stackoverflow.com/questions/9229034/c-sharp-how-to-select-listbox-item-with-right-lick) – 2012-03-09 13:49:36

+0

感谢它的帮助! – falukky 2012-03-09 13:58:40

回答

3

不分配到列表框的ContextMenuStrip;而不是编程方式打开它,你已经确定所选择的指数

int _selectedIndex; 

private void listBox1_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) { 
     _selectedIndex = listBox1.IndexFromPoint(e.Location); 
     if (_selectedIndex == -1) { 
      return; 
     } 
     contextMenuStrip1.Show(listBox1.PointToScreen(e.Location)); 
    } 
} 

UPDATE:

现在你可以从菜单项访问索引点击

private void contextMenuStripDelete_Click(object sender, EventArgs e) 
{ 
    listBoxFiles.Items.RemoveAt(_selectedIndex); 
} 

无需重新计算选择索引并测试-1。如果索引为-1,则上下文菜单根本不会打开。

+0

我不明白这一点:在确定选定的索引后以编程方式打开它,我该怎么做? – falukky 2012-03-09 13:46:09

+0

感谢它的帮助! – falukky 2012-03-09 13:58:57

+0

行,所以现在我可以达到该项目的索引,我已经在我的列表框菜单中2选项其中之一是删除(请参阅我的更新),在listBoxFiles_MouseUp函数中我可以达到物品索引,但我怎么能做到这一点contextMenuStripDelete_Click函数? – falukky 2012-03-09 14:12:58

0

使用容器控件:listBoxFiles.Items.IndexOf(listBoxFiles.SelectedItem)