Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Аналог ListBox_Click для ListView в режиме просмотра lvwReport / 13 сообщений из 13, страница 1 из 1
24.07.2012, 10:59
    #37890157
Mishel97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Всем доброго времени суток!

Код

Private Sub ListView1_Click()

For intR = 1 To ListView1.ListItems.Count
If ListView1.ListItems(intR).Selected = True Then
For intA = 1 To 10
If ListView1.ListItems(intR).SubItems(1) = Data(intA, 2) Then
MsgBox Data(intA, 2)
Exit Sub
End If
Next intA
End If
Next intR
End Sub

почти обрабатывает событие ListView1_Click(). Код работает, если сделать Click по элементам первого столбца ListView1, при этом элемент выделяется. Не работает, если сделать Click по элементам второго столбца, тоесть по ListItems(intR).SubItems(1).

Вопрос, - какой код будет обрабатывать ListView1_Click(), аналогично обработке ListBox1_Click()?
...
Рейтинг: 0 / 0
24.07.2012, 11:22
    #37890200
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
у меня работает, что я делаю не так?

пример в студию
...
Рейтинг: 0 / 0
24.07.2012, 11:44
    #37890230
Mishel97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
...
Рейтинг: 0 / 0
25.07.2012, 11:38
    #37891794
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Надо поставить свойство FullRowSelect=True и лучше обрабатывать событие ItemClick вместо Click
...
Рейтинг: 0 / 0
25.07.2012, 11:38
    #37891795
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Надо поставить свойство FullRowSelect=True и лучше обрабатывать событие ItemClick вместо Click
...
Рейтинг: 0 / 0
25.07.2012, 11:44
    #37891808
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
в принципе, весь тот код можно сократить до одной строчки:
Код: vbnet
1.
2.
3.
4.
5.
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

If Item.SubItems(1) = Data(Item.Index, 2) Then MsgBox Data(Item.Index, 2)

End Sub



и на будущее - не нужно искать в цикле выделенный элемент - у ListView есть свойство SelectedItem
...
Рейтинг: 0 / 0
25.07.2012, 15:19
    #37892374
Mishel97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Спасибо, … т. е. результаты превзошли все ожидания.


Ещё один вопрос невозможно обойти в аналоге ListBox_Click для ListView в режиме просмотра lvwReport – обработка события

Код: plaintext
1.
2.
3.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
...

End Sub

Так

Код: plaintext
1.
2.
3.
4.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)

If Item.SubItems(1) = Data(Item.Index, 2) Then MsgBox Data(Item.Index, 2)

End Sub

не срабатывает - Run-time error '424' Object required.

Так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)

For intR = 1 To ListView1.ListItems.Count
  
 If ListView1.SelectedItem.Selected = True Then
  For intA = 1 To 10
          If ListView1.ListItems(intR).SubItems(1) = Data(intA, 2) Then
            
            MsgBox Data(intA, 2)
          Exit Sub
          End If
  Next intA
 End If

Next intR

End Sub

срабатывает, но работает как Private Sub ListView1_Click() (отсутствует событие MouseUp) и не работает ни один из кодов:

Код: plaintext
If ListView1.SelectedItem.Index = -1 Then Exit Sub
Код: plaintext
If ListView1.SelectedItem.Selected = False Then Exit Sub
Код: plaintext
If ListView1.SelectedItem = Null Then Exit Sub

Вопрос, - какой код будет обрабатывать MouseUp для ListView1 в режиме просмотра lvwReport?
...
Рейтинг: 0 / 0
25.07.2012, 22:18
    #37892990
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Mishel97не срабатывает - Run-time error '424' Object required.естественно не срабатывает, откуда там возьмется Item? надо же не просто копипастить, а пытаться еще и разобраться.

Код: vbnet
1.
If ListView1.SelectedItem Is Nothing Then Exit Sub



Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
26.07.2012, 00:38
    #37893094
Mishel97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Код:
Код: vbnet
1.
If ListView1.SelectedItem Is Nothing Then Exit Sub


не выводит из процедуры в этом коде (er. - '424')
Код: vbnet
1.
2.
3.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
If Item.SubItems(1) = Data(Item.Index, 2) Then MsgBox Data(Item.Index, 2)
End Sub


и в этом коде
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
For intR = 1 To ListView1.ListItems.Count   
If ListView1.SelectedItem.Selected = True Then 
 For intA = 1 To 10   
  If ListView1.ListItems(intR).SubItems(1) = Data(intA, 2) Then 
    MsgBox Data(intA, 2)         
  Exit Sub  
  End If 
 Next intA 
End If
Next intR
End Sub


Код из одной строки:
Код: vbnet
1.
2.
3.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
If ListView1.SelectedItem.Index > 0 Then MsgBox ListView1.SelectedItem.SubItems(1),vbInformation
End Sub


работает без ошибок, однако срабатывает и при ListView1.SelectedItem.Index =0. Первый код и здесь не выводит из процедуры.

Сдедующий код похоже предназначен для обработки события ListView1_MouseUp.


PLACE THIS CODE IN A VBA MODULE

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
'List View Hit Test constants
Private Const LVHT_ONITEMICON As Long = &H2
Private Const LVHT_ONITEMLABEL As Long = &H4
Private Const LVHT_ONITEMSTATEICON As Long = &H8
Private Const LVHT_ONITEM As Long = (LVHT_ONITEMICON Or _
LVHT_ONITEMLABEL Or _
LVHT_ONITEMSTATEICON)

Private Type LVHITTESTINFO
Pt As POINTAPI
flags As Long
item As Long
subitem As Long
End Type

Public Function GetSubItemRowCol(LV As ListView, ByVal x As Single
ByVal y As Single) As Variant  
                                                                                                                                            
Dim RetVal
Dim HitData(1)
Dim Hit As LVHITTESTINFO

With Hit
.Pt.x = x
.Pt.y = y
.flags = LVHT_ONITEM
End With

RetVal = SendMessage(LV.hWnd, LVM_SUBITEMHITTEST, 0&, Hit)
HitData(0) = Hit.item
HitData(1) = Hit.subitem

GetSubItemRowCol = HitData

End Function


THIS CODE IS FOR THE MOUSEUP EVENT

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift A
Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y A
stdole.OLE_YPOS_PIXELS)

Dim Col
Dim Row
Dim RetVal

RetVal = GetSubItemRowCol(ListView1, x, y)
Row = RetVal(0)
Col = RetVal(1)

End Sub



Однако в строке Public Function GetSubItemRowCol(LV As ListView, ByVal x As Single ByVal y As Single) As Variant -
Compile error: Expected: list separator or).
...
Рейтинг: 0 / 0
26.07.2012, 01:31
    #37893120
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Mishel97Код:
Код: vbnet
1.
If ListView1.SelectedItem Is Nothing Then Exit Sub


не выводит из процедуры в этом коде (er. - '424')
Код: vbnet
1.
2.
3.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
If Item.SubItems(1) = Data(Item.Index, 2) Then MsgBox Data(Item.Index, 2)
End Sub

еще раз - в этой процедуре нет объекта Item
Mishel97Однако в строке Public Function GetSubItemRowCol(LV As ListView, ByVal x As Single ByVal y As Single) As Variant -
Compile error: Expected: list separator or).ее надо написать в одну строку, а у вас - в две
...
Рейтинг: 0 / 0
26.07.2012, 01:33
    #37893121
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Mishel97Код:
Код: vbnet
1.
If ListView1.SelectedItem Is Nothing Then Exit Sub


не выводит из процедуры в этом коде (er. - '424')
Код: vbnet
1.
2.
3.
Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
If Item.SubItems(1) = Data(Item.Index, 2) Then MsgBox Data(Item.Index, 2)
End Sub

еще раз - в этой процедуре нет объекта Item
Mishel97Однако в строке Public Function GetSubItemRowCol(LV As ListView, ByVal x As Single ByVal y As Single) As Variant -
Compile error: Expected: list separator or).ее надо написать в одну строку, а у вас - в две
...
Рейтинг: 0 / 0
26.07.2012, 01:55
    #37893127
Mishel97
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
Одна строка помогла.
Не все ошибки, в строке - Pt As POINTAPI - Compile error: User-defined type not defined.
...
Рейтинг: 0 / 0
26.07.2012, 02:09
    #37893129
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог ListBox_Click для ListView в режиме просмотра lvwReport
нужно определить тип POINTAPI

берем в руки поиск и ищем
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Аналог ListBox_Click для ListView в режиме просмотра lvwReport / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]