2012-05-25 2 views
0

Во время написания пользовательского элемента управления для ListView: Я перекрывая этот метод так:HoverItem returing нуля в ListView

protected override void OnDragDrop(DragEventArgs drgevent) 
{ 
    base.OnDragDrop(drgevent); 

    // get the currently hovered row that the items will be dragged to 
    Point clientPoint = base.PointToClient(new Point(drgevent.X, drgevent.Y)); 
    ListViewItem hoverItem = base.GetItemAt(clientPoint.X, clientPoint.Y); 

Иногда hoverItem становится нулевым :(Это становится нулевым, когда я опуская деталь в правом область списка ... Если я отброшу его где-нибудь в списке, там есть элементы и текст, он отлично работает, если я отброшу его где-нибудь, что элементы не имеют текста, тогда он станет null .... enter image description here

Я прилагаю изображение для большей ясности

В чем проблема? или вы думаете, что для этого есть лучшие способы?

+0

Есть ли какая-то особая причина, почему вы переопределяете 'OnDragDrop', вместо добавления другого обработчика событий? –

ответ

1

Нет проблем. Это по дизайну. Нет пункта, где находится красная точка. ListView имеет разные режимы просмотра (свойство View), где могут быть иконки/текстовые «блоки», которые заключают в себе каждый элемент, или может быть несколько столбцов элементов.

Я думаю, что настройка свойства View на View.Details и установка FullRowSelect на true, GetItemAt попадет в пробелы до конца для каждой строки, но я должен попробовать это, чтобы быть уверенным.

+0

Да, я ищу способ вернуть его, даже если он находится в белой области. Также мне нужно некоторое представление, которое выглядит как элементы ListBox (каждый элемент в одной строке). – Bohn

+0

Вы пытались 'Details' и 'FullRowSelect'? – Tergiver

+0

Работал! ... У меня были детали из ранее ... но я думаю, что FullRowSelect сделал трюк ... спасибо – Bohn

Смежные вопросы