Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: ListView и SubItems Добавлено: 13.02.05 09:32  

Автор вопроса:  KVU
Здравствуйте, хотелось бы узнать есть возможность у объекта List View изменять SubItems, так же как Item кликнув по нему?
С Уважением, Владислав.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #1 Добавлено: 13.02.05 13:14
Цитата:

>> Only one thing I can't figure is how to click on an item e.g. line 4 col 3 and identify the field contents.

Ответ:
Place this code to ListView1_MouseDown (or ...MouseUp) event:

    ;Dim lvHTI As LVHITTESTINFO
    lvHTI.pt.x = x / Screen.TwipsPerPixelX
    lvHTI.pt.y = y / Screen.TwipsPerPixelY
    SendMessage ListView1.Hwnd, LVM_SUBITEMHITTEST, 0, lvHTI
    lItemIndex = lvHTI.iItem + 1
    lSubItemIndex = lvHTI.iSubItem

That's all!
Having these two indexes you can use them to get Text property of the
corresponding ListItem and/or ListSubItem.

Regards,
.....

PS: You can also place this code to ItemClick event, but as far as this event
does not have X and Y arguments, you'll have to use GetCursorPos() and
ScreenToClient() API-functions to obtain X and Y in the client scale.

Надеюсь, разберёшься.

Ответить

Номер ответа: 2
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #2 Добавлено: 13.02.05 15:38
Есть SendMessage,hList,LVM_GETITEM
без вычисления координат мыши и пересчета их в координаты листвью

Ответить

Номер ответа: 3
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #3 Добавлено: 13.02.05 16:29
Вообще-то можно ещё проще:
st = ListView1.SelectedItem.ListSubItems(2).Text


Но, насколько я понял, у автора вопроса проблема именно с "двойкой" - т.е. как понять, что мышкой щёлкнули не просто по "пятому ряду" (к примеру), а именно по 2-ому саб-айтему этого ряда. Ведь листвью имеет свойство SelectedItem, но НЕ имеет свойства SelectedSubItem! выделение он отслеживает на уровне "рядов", а не "ячеек".

Поэтому без LVM_SUBITEMHITTEST невозможно понять, на какой именно сабайтем пришёлся щелчок мыши.

Ответить

Номер ответа: 4
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #4 Добавлено: 13.02.05 18:58
Очень даже можно понять, по какому субитему был клик, и без LVM_SUBITEMHITTEST.

Когда происходит клик на каком-либо элементе листвью, система посылает WM_NOTIFY c указателем на структуру, в которой всё расписывается: какой hwnd контрола, какое действие случилось (клик), на каком итеме и в каком субитеме этого итема нажата мышь. Всё готовое преподносится. Бери - не хочу. На VB нет примера, вот на асме как раз только эти и занимался. Думаю, можно разобраться и понять, как получить информацию о клике:

    .elseif uMsg==WM_NOTIFY
        mov ebx,lParam
        mov eax,[ebx.NMHDR].hwndFrom
        .if eax==hListAddr
            mov eax,[ebx.NMHDR].code
            .if eax==NM_CLICK
                assume ebx: ptr NMITEMACTIVATE
                mov eax,[ebx].iItem    ;номер итема
                mov edx,[ebx].iSubItem ;номер субитема



Т.е. присылается указатель на структуру NMITEMACTIVATE, в которой описывается, кто активирован, каково его предыдущее состояние, состояние клавы при нажатии мыши и т.д.

Ответить

Номер ответа: 5
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #5 Добавлено: 15.02.05 11:25
2cresta:
Согласен, проморгал эту структуру! Теперь буду знать. И понял, почему именно её проморгал: в той задаче, которую я решал с листвью, мне нужно было определять айтем/сабайтем при движении мыши, а не при щелчке (выборе ряда), и поэтому, есс-с-сно, я использовал LVM_SUBITEMHITTEST. И вот после этого меня на этом сообщении и заклинило :))

Ответить

Номер ответа: 6
Автор ответа:
 Sur



ICQ: 1249088 

Вопросов: 10
Ответов: 304
 Web-сайт: sur.hotbox.ru/
 Профиль | | #6
Добавлено: 15.02.05 17:18
Думаю человеку надо было это
Контрол ListView предоставляющий возможность интерактивно редактировать значения Subitem'ов.
http://vbrussian.com/download.asp?Type=Control&ID=18

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам