03-11-21, 01:51 PM
سلام عليكم اخي الكريم
وجدت ماتطلبه في هذا الموضوع : https://www.codeproject.com/Tips/1264552...e-ListView
تحتاج الى ان تستخدم ListView معدلة تضيف السهم لاغلاق وفتح المجموعة
اضف الكلاس الى مشروعك ثم استخدم CollapsibleListView بدلا من الليست فيو العادية
قمت باعداد مثال شبيه بما ارفقته
وجدت ماتطلبه في هذا الموضوع : https://www.codeproject.com/Tips/1264552...e-ListView
تحتاج الى ان تستخدم ListView معدلة تضيف السهم لاغلاق وفتح المجموعة
كود :
Imports System.Runtime.InteropServices
Public Class CollapsibleListView
Inherits ListView
Private Const LVGF_STATE As Integer = &H4
Private Const LVGS_COLLAPSIBLE As Integer = &H8
Private Const LVM_FIRST As Integer = &H1000
Private Const LVM_SETGROUPINFO As Integer = (LVM_FIRST + 147)
Private Const LVM_INSERTGROUP As Integer = (LVM_FIRST + 145)
Private Const WM_LBUTTONUP As Integer = &H202
Protected Overrides Sub WndProc(ByRef message As Message)
Select Case message.Msg
Case WM_LBUTTONUP
MyBase.DefWndProc(message)
Case LVM_INSERTGROUP
MyBase.WndProc(message)
Dim group = Marshal.PtrToStructure(Of LvGroup)(message.LParam)
SetGroupCollapsible(group.iGroupId)
Return
End Select
MyBase.WndProc(message)
End Sub
<DllImport("user32.dll")>
Private Shared Function SendMessage(ByVal handle As IntPtr, ByVal message As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer
End Function
<StructLayout(LayoutKind.Sequential)>
Private Structure LvGroup
Public cbSize As Integer
Public mask As Integer
<MarshalAs(UnmanagedType.LPTStr)>
Public pszHeader As String
Public cchHeader As Integer
<MarshalAs(UnmanagedType.LPTStr)>
Public pszFooter As String
Public cchFooter As Integer
Public iGroupId As Integer
Public stateMask As Integer
Public state As Integer
Public uAlign As Integer
End Structure
Private Sub SetGroupCollapsible(ByVal groupItemIndex As Integer)
Dim group As LvGroup = New LvGroup()
group.cbSize = Marshal.SizeOf(group)
group.state = LVGS_COLLAPSIBLE
group.mask = LVGF_STATE
group.iGroupId = groupItemIndex
Dim ip As IntPtr = IntPtr.Zero
Try
ip = Marshal.AllocHGlobal(group.cbSize)
Marshal.StructureToPtr(group, ip, False)
SendMessage(Handle, LVM_SETGROUPINFO, groupItemIndex, ip)
Finally
If ip <> IntPtr.Zero Then
Marshal.FreeHGlobal(ip)
End If
End Try
End Sub
End Classاضف الكلاس الى مشروعك ثم استخدم CollapsibleListView بدلا من الليست فيو العادية
قمت باعداد مثال شبيه بما ارفقته

