我正在尝试点击列表视图中的项目。有没有办法做到这一点?我想单独点击每一个(并从该操作中,写入硬件,更改开/关指示(粗体字),并更新该寄存器的十六进制值。
我已经找到了如何通过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
答案 0 :(得分: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;
}
根据鼠标位置创建另一种获取行索引的方法。此方法将根据鼠标位置找到行索引,并将设置ListView的FocusedItem
属性。因此,您可以将焦点放在点击的项目上。
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
。