Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: клики в ListView Добавлено: 24.04.05 19:37  

Автор вопроса:  Yura | ICQ: 34372249 
Надо получить запись(текст), из item'а в listview по клику на нему(по итему).
Я это сделал временно пока так:

        Dim Item As New ListViewItem
        Dim formy, yy As Integer
        yy = ListView1.MousePosition.Y
        formy = Me.Top
        Item = ListView1.GetItemAt(10, yy - formy - 33)
        txtService.Text = Item.Text

Но это на мой взгляд не правильно. 33 это висота в точках от компонента(на сколько я понял, даже не от компонента, а от первой сточки, не считая высоты заголовов столбцов) listview до верхнего края формы. число 10 тоже просто из воздуха, тк оно относительно клиента ставиться...
Вопрос. При смене стилей, размера шрифта и перехода в xp стайл(проверить к сожалению не могу тк стоит 2003 server), должно поменяться и это расстояние(33), которое я опытным путем вывел, для корректного обращения к требуемой записи по клику. поэтому на других компах могут быть небольшые несоответствия.
как правильно надо реализовать эту функцию?

Ответить

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

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



Вопросов: 87
Ответов: 459
 Профиль | | #1 Добавлено: 24.04.05 20:50
LVM_SUBITEMHITTEST, SendMessage.
В отличие от штатного HitTest - позволит определить саб-айтем (а не только айтем).

Ответить

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



ICQ: 34372249 

Вопросов: 3
Ответов: 8
 Профиль | | #2 Добавлено: 25.04.05 00:39
А по подробней по этой теме можно?
Маны хотя бы какие нибудь? или (буду оч благодарен) за пример(проект(часть))?
web---master[a]yandex.ru

Ответить

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



ICQ: 1249088 

Вопросов: 10
Ответов: 304
 Web-сайт: sur.hotbox.ru/
 Профиль | | #3
Добавлено: 25.04.05 10:53
Private Type lvwMsgInfo
    X As Long
    Y As Long
    Flgs As Long
    Itm As Long
    SubItm As Long
End Type
Dim lvwMsg As lvwMsgInfo

Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
lvwMsg.X = X / Screen.TwipsPerPixelX
lvwMsg.Y = Y / Screen.TwipsPerPixelY
SendMessage ListView1.hwnd, 4153, 0, lvwMsg
If lvwMsg.Flgs And 14 Then
    Text1 = ListView1.ListItems(lvwMsg.Itm + 1).Text
    If lvwMsg.SubItm Then Text1 = ListView1.ListItems(lvwMsg.Itm + 1).SubItems(lvwMsg.SubItm)
End If
End Sub

Ответить

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



ICQ: 34372249 

Вопросов: 3
Ответов: 8
 Профиль | | #4 Добавлено: 25.04.05 11:45
Private Type lvwMsgInfo
    X As Long
    Y As Long
    Flgs As Long
    Itm As Long
    SubItm As Long
End Type
Dim lvwMsg As lvwMsgInfo

Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
lvwMsg.X = X / Screen.TwipsPerPixelX
lvwMsg.Y = Y / Screen.TwipsPerPixelY
SendMessage ListView1.hwnd, 4153, 0, lvwMsg
If lvwMsg.Flgs And 14 Then
    Text1 = ListView1.ListItems(lvwMsg.Itm + 1).Text
    If lvwMsg.SubItm Then Text1 = ListView1.ListItems(lvwMsg.Itm + 1).SubItems(lvwMsg.SubItm)
End If
End Sub


Это для VB6. A Wizard vb6->vb.net неправильно его переводит. А квалификации не хватает чтоб это сделать самому, появляется ещё куча вопросов. Проект готов на 95%, остается только вот эта часть. Даже обработка ошибок готова почти на 100.
Как правильно перевести эту функцию под .NET?

Ответить

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



ICQ: 34372249 

Вопросов: 3
Ответов: 8
 Профиль | | #5 Добавлено: 25.04.05 11:52
После wizarda получилось нечто


Private Structure lvwMsgInfo
Dim X As Integer
Dim Y As Integer
Dim Flgs As Integer
Dim Itm As Integer
Dim SubItm As Integer
End Structure

Dim lvwMsg As lvwMsgInfo

Private Sub ListView1_MouseDown(ByRef Button As Short, ByRef Shift As Short, ByRef X As Single, ByRef Y As Single)
Dim Text1 As Object
Dim ListView1 As Object
        Dim SendMessage As Object

lvwMsg.X = X / VB6.TwipsPerPixelX
lvwMsg.Y = Y / VB6.TwipsPerPixelY
'UPGRADE_WARNING: Couldn't resolve default property of object ListView1.hwnd. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'
SendMessage(ListView1.hwnd, 4153, 0, lvwMsg)
If lvwMsg.Flgs And 14 Then
'UPGRADE_WARNING: Couldn't resolve default property of object ListView1.ListItems. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'
'UPGRADE_WARNING: Couldn't resolve default property of object Text1. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'
Text1 = ListView1.ListItems(lvwMsg.Itm + 1).Text
'UPGRADE_WARNING: Couldn't resolve default property of object ListView1.ListItems. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'
'UPGRADE_WARNING: Couldn't resolve default property of object Text1. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'
If lvwMsg.SubItm Then Text1 = ListView1.ListItems(lvwMsg.Itm + 1).SubItems(lvwMsg.SubItm)
End If
End Sub


Ещё столкнулся с проблемой декларации SendMessage, тк в .NET отсутствует тип ANY. Как её надо декларировать?

Ответить

Страница: 1 |

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



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