C # .net Сделать список элементов кликабельны

1

Я пытаюсь щелкнуть элементы в списке. Есть ли способ сделать это? Я хотел бы щелкнуть по каждому из них отдельно (и от этого действия, записать на аппаратное обеспечение, изменить индикацию включения/выключения (полужирный шрифт) и обновить шестнадцатеричное значение для этого регистра.

Я нашел, как щелкнуть по столбцам через msdn, но я не могу понять, как нажать на элементы. http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.oncolumnclick

У меня мало опыта, но похоже, что я должен иметь интерфейс от Control.Onclick: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onclick( v = vs.110).aspx

Изображение 174551

  • 1
    Вы имеете в виду FullRowSelect ?
  • 0
    Не совсем, я хочу нажать на каждый из них по отдельности, если это возможно с помощью списка.
Показать ещё 7 комментариев
Теги:
winforms

1 ответ

0

Попробуйте этот код.

Обработайте событие ListView_MouseUp и запишите следующий код.

private void listView1_MouseUp(object sender, MouseEventArgs e)
{
    if (listView1.View != View.Details)
        return; 
    int rowIndex = getRowIndex(e.Location);
    if (rowIndex == -1)
        return ;
    int columnIndex = getColumnIndex(e.Location);
    if (columnIndex > -1)
        OnCellClick(rowIndex, columnIndex);
}

Теперь создайте метод для получения индекса столбца в соответствии с положением мыши. Этот метод найдет индекс столбца в соответствии с положением мыши.

private int getColumnIndex(Point p)
{
    Rectangle r = Rectangle.Empty;
    r = Rectangle.Empty;
    for (int i = 0; i < listView1.Columns.Count; i++)
    {
        r = new Rectangle(r.X + r.Width, 0, listView1.Columns[i].Width, listView1.Height);
        if (r.Contains(p))            
            return i;
    }
    return -1;
}

Создайте еще один способ получения индекса строки в соответствии с положением мыши. Этот метод найдет индекс строки в соответствии с положением мыши, и он установит свойство FocusedItem ListView. Таким образом, вы можете сосредоточиться на клике.

private int getRowIndex(Point p)
{
    Rectangle r = Rectangle.Empty;
    for (int i = 0; i < listView1.Items.Count; i++)
    {
        Rectangle r1 = listView1.GetItemRect(i);
        r = new Rectangle(0, r1.Top, listView1.Width, r1.Height);
        if (r.Contains(p))
        {
            listView1.FocusedItem = listView1.Items[i];
            return i;
        }
    }
    return -1;
}

Это метод, который вам нужно обработать. Ваш код, чтобы получить значение из ячейки ListView, будет записан в этом методе.

private void OnCellClick(int RowIndex, int ColumnIndex)
{

    MessageBox.Show("Column : " + ColumnIndex.ToString() + ", Row: " + RowIndex.ToString());
}

Я знаю, что нет необходимости создавать метод для получения RowIndex. Мы можем получить элемент непосредственно из местоположения с помощью GetItemAt(x,y). Но этот метод работает только тогда, когда вы установили FullRowSelect в true иначе вы получите null если позиция мыши находится в подпункте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню