Как получить индекс предмета из ListBox - PullRequest
0 голосов
/ 09 марта 2012

В настоящее время используется Listbox и 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);
}

Ответы [ 2 ]

3 голосов
/ 09 марта 2012

Не назначайте ContextMenuStrip для ListBox; вместо этого откройте его программно после того, как вы определили выбранный индекс

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 голосов
/ 09 марта 2012

Использовать элемент управления контейнера: listBoxFiles.Items.IndexOf (listBoxFiles.SelectedItem)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...