Я пытаюсь щелкнуть элементы в списке. Есть ли способ сделать это? Я хотел бы щелкнуть по каждому из них отдельно (и от этого действия, записать на аппаратное обеспечение, изменить индикацию включения/выключения (полужирный шрифт) и обновить шестнадцатеричное значение для этого регистра.
Я нашел, как щелкнуть по столбцам через 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
Попробуйте этот код.
Обработайте событие 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
если позиция мыши находится в подпункте.