/// <summary>
        /// Updates a <see cref="ListViewGroup"/> item's state within current instance as collapsible
        /// </summary>
        /// <param name="groupItemIndex">Group item index</param>
        private void SetGroupCollapsible(int groupItemIndex)
        {
            LvGroup group = new LvGroup();

            group.cbSize   = Marshal.SizeOf(group);
            group.state    = LVGS_COLLAPSIBLE;
            group.mask     = LVGF_STATE;
            group.iGroupId = groupItemIndex;

            IntPtr ip = IntPtr.Zero;

            try
            {
                ip = Marshal.AllocHGlobal(group.cbSize);
                Marshal.StructureToPtr(group, ip, false);
                SendMessage(Handle, LVM_SETGROUPINFO, groupItemIndex, ip);
            }
            finally
            {
                if (ip != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(ip);
                }
            }
        }
示例#2
0
 private static void SetGroupCollapsible(ListView listView, int state)
 {
     if (listView == null)
     {
         return;
     }
     foreach (ListViewGroup grp in listView.Groups)
     {
         object tmprtnval = propListVireGroupID?.GetValue(grp, null);
         if (tmprtnval is int id)
         {
             LvGroup group = new LvGroup();
             group.cbSize   = Marshal.SizeOf(group);
             group.state    = (int)state; // LVGS_COLLAPSIBLE
             group.mask     = 4;          // LVGF_STATE
             group.iGroupId = id;
             IntPtr ip = IntPtr.Zero;
             try
             {
                 ip = Marshal.AllocHGlobal(group.cbSize);
                 Marshal.StructureToPtr(group, ip, false);
                 SendMessage(listView.Handle, LVM_SETGROUPINFO, id, ip);
             }
             catch (Exception ex)
             {
                 Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
             }
             finally
             {
                 Marshal.FreeHGlobal(ip);
             }
         }
     }
 }
示例#3
0
        private static void ToggleGroupCollapseState(IntPtr handle, int id)
        {
            int     i     = id;
            LvGroup group = new LvGroup();

            group.cbSize   = Marshal.SizeOf(group);
            group.mask     = 4; // LVGF_STATE
            group.iGroupId = i;
            IntPtr ip = IntPtr.Zero;

            try
            {
                ip = Marshal.AllocHGlobal(group.cbSize);
                Marshal.StructureToPtr(group, ip, false);
                var rst = SendMessage(handle, LVM_GETGROUPSTATE, i, Collapsed); // #define LVM_GETGROUPINFO (LVM_FIRST + 149)

                if (rst == Collapsed)
                {
                    group.state = Collapsible;
                }
                else
                {
                    group.state = Collapsible + Collapsed;
                }
                Marshal.StructureToPtr(group, ip, false);
                SendMessage(handle, LVM_SETGROUPINFO, i, ip); // #define LVM_SETGROUPINFO (LVM_FIRST + 147)
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
            }
            finally
            {
                Marshal.FreeHGlobal(ip);
            }
        }