Я использую 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
, он выделяется синим цветом, поэтому невозможно просмотреть то, что выбрано. Я пытаюсь убрать эту синюю подсветку.
Есть мысли?