我正在使用ListView.GetItemAt(x,y)
从ListView
中检索项目,但我不是
我将FullRowSelect
选项设置为false
时能够获取该项目。
我不确定如何在.NET 1.1中执行此操作。有没有人有任何指示?
以下是代码段:
public int GetListViewSubItem(ListView listView1, Point pt)
{
const int LVM_FIRST = 0x1000;
const int LVM_GETSUBITEMRECT = (LVM_FIRST + 56);
const int LVIR_BOUNDS = 0;
RECT myrect;
ListViewItem lvitem = listView1.GetItemAt(pt.X, pt.Y);
if(lvitem == null && listView1.SelectedItems.Count > 0)
lvitem = listView1.SelectedItems[0];
int intLVSubItemIndex = -1;
ListViewItem.ListViewSubItem LVSubItem = null;
if(lvitem != null)
{
int intSendMessage;
for ( int i = 1; i <= lvitem.SubItems.Count - 1; i++)
{
LVSubItem = lvitem.SubItems[i];
myrect = new RECT();
myrect.top = i;
myrect.left = LVIR_BOUNDS;
intSendMessage = SendMessage(listView1.Handle,
LVM_GETSUBITEMRECT,
lvitem.Index, ref myrect);
if (pt.X < myrect.left)
{
LVSubItem = lvitem.SubItems[0];
intLVSubItemIndex = 0;
break;
}
else if (pt.X >= myrect.left & pt.X <= myrect.right)
{
intLVSubItemIndex = i;
break;
}
else
LVSubItem = null;
}
}
if (LVSubItem == null || lvitem == null)
{
intLVSubItemIndex = -1;
}
return intLVSubItemIndex;
}
这个方法应该显示我点击了哪个单元格。
Tt有效,但如果我将fullrowselect
更改为false
,则会返回null
值。
我甚至尝试getitemat(0,e.y)
,但它没有用。
每当我在ListView
中选择一个项目时,它都会以蓝色突出显示,因此无法查看所选内容。我正试图删除那个蓝色的亮点。
有什么想法吗?
答案 0 :(得分:1)
你能详细说明你想要做什么吗?
您的ListView的ViewStyle是否设置为Details?由于你提到将FullRowSelect设置为false,我认为它是。
GetItemAt(x,y)仅在鼠标单击属于某个项目的实际文本时才有效。因此,如果您单击与项目相同的行但在列中没有文本,则它将返回null。
解决方法是简单地将0作为x参数传递:
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
ListViewItem item = listView1.GetItemAt(0, e.Y);
if (item == null)
{
MessageBox.Show("Null");
}
else
{
MessageBox.Show(item.Text);
}
}
我可以确认这样可以正常工作 - 即使只有第一列中有文本,它也会返回该行上的项目。
答案 1 :(得分:1)
private int getSelectedSubItemIndex(ListView listView)
{
if (listView.SelectedItems.Count == 1)
{
int x = 0;
ListViewItem item = listView.SelectedItems[0];
Point pt = listView.PointToClient(Control.MousePosition);
for (int idx = 0; idx < item.SubItems.Count; ++idx)
{
x += listView.Columns[idx].Width;
if (pt.X < x)
return idx;
}
}
return -1;
}