Попробуйте этот код.
Обращайтесь к событию 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;
}
Создайте еще один способ получения индекса строки в соответствии с положением мыши. Этот метод найдет индекс строки в соответствии с положением мыши, и он установит свойство List12. Таким образом, вы можете сосредоточиться на клике.
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
, когда позиция мыши находится в подпункте.
Вы имеете в виду _ [FullRowSelect] (http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.fullrowselect (v = vs.110) .aspx) _? – MickyD
Не совсем, я хочу щелкнуть по каждому из них индивидуально, если это возможно со списком. – SwimBikeRun
LV не имеет объекта Item или SubItem Click, но только DoubleClick с общими аргументами. Нетрудно подклассифицировать его и добавить событие «SubItemClick» путем переопределения «OnMouseUp», хотя – Plutonix