private unsafe void WmReflectNotify(ref Message m)
        {
            System.Windows.Forms.NativeMethods.LVHITTESTINFO lvhittestinfo2;
            System.Windows.Forms.NativeMethods.NMHDR* lParam = (System.Windows.Forms.NativeMethods.NMHDR*) m.LParam;
            switch (lParam->code)
            {
                case -176:
                case -106:
                {
                    this.listViewState[0x4000] = false;
                    System.Windows.Forms.NativeMethods.NMLVDISPINFO nmlvdispinfo = (System.Windows.Forms.NativeMethods.NMLVDISPINFO) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLVDISPINFO));
                    LabelEditEventArgs e = new LabelEditEventArgs(nmlvdispinfo.item.iItem, nmlvdispinfo.item.pszText);
                    this.OnAfterLabelEdit(e);
                    m.Result = e.CancelEdit ? IntPtr.Zero : ((IntPtr) 1);
                    if (!e.CancelEdit && (nmlvdispinfo.item.pszText != null))
                    {
                        this.Items[nmlvdispinfo.item.iItem].Text = nmlvdispinfo.item.pszText;
                    }
                    return;
                }
                case -175:
                case -105:
                {
                    System.Windows.Forms.NativeMethods.NMLVDISPINFO_NOTEXT nmlvdispinfo_notext = (System.Windows.Forms.NativeMethods.NMLVDISPINFO_NOTEXT) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLVDISPINFO_NOTEXT));
                    LabelEditEventArgs args = new LabelEditEventArgs(nmlvdispinfo_notext.item.iItem);
                    this.OnBeforeLabelEdit(args);
                    m.Result = args.CancelEdit ? ((IntPtr) 1) : IntPtr.Zero;
                    this.listViewState[0x4000] = !args.CancelEdit;
                    return;
                }
                case -155:
                    if (this.CheckBoxes)
                    {
                        System.Windows.Forms.NativeMethods.NMLVKEYDOWN nmlvkeydown = (System.Windows.Forms.NativeMethods.NMLVKEYDOWN) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLVKEYDOWN));
                        if (nmlvkeydown.wVKey == 0x20)
                        {
                            ListViewItem focusedItem = this.FocusedItem;
                            if (focusedItem != null)
                            {
                                bool flag = !focusedItem.Checked;
                                if (!this.VirtualMode)
                                {
                                    foreach (ListViewItem item2 in this.SelectedItems)
                                    {
                                        if (item2 != focusedItem)
                                        {
                                            item2.Checked = flag;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    return;

                case -114:
                    this.OnItemActivate(EventArgs.Empty);
                    return;

                case -113:
                {
                    System.Windows.Forms.NativeMethods.NMLVCACHEHINT nmlvcachehint = (System.Windows.Forms.NativeMethods.NMLVCACHEHINT) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLVCACHEHINT));
                    this.OnCacheVirtualItems(new CacheVirtualItemsEventArgs(nmlvcachehint.iFrom, nmlvcachehint.iTo));
                    return;
                }
                case -111:
                    if (!this.ItemCollectionChangedInMouseDown)
                    {
                        System.Windows.Forms.NativeMethods.NMLISTVIEW nmlv = (System.Windows.Forms.NativeMethods.NMLISTVIEW) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLISTVIEW));
                        this.LvnBeginDrag(MouseButtons.Right, nmlv);
                    }
                    return;

                case -109:
                    if (!this.ItemCollectionChangedInMouseDown)
                    {
                        System.Windows.Forms.NativeMethods.NMLISTVIEW nmlistview2 = (System.Windows.Forms.NativeMethods.NMLISTVIEW) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLISTVIEW));
                        this.LvnBeginDrag(MouseButtons.Left, nmlistview2);
                    }
                    return;

                case -108:
                {
                    System.Windows.Forms.NativeMethods.NMLISTVIEW nmlistview = (System.Windows.Forms.NativeMethods.NMLISTVIEW) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLISTVIEW));
                    this.listViewState[0x20000] = true;
                    this.columnIndex = nmlistview.iSubItem;
                    return;
                }
                case -101:
                {
                    System.Windows.Forms.NativeMethods.NMLISTVIEW* nmlistviewPtr2 = (System.Windows.Forms.NativeMethods.NMLISTVIEW*) m.LParam;
                    if ((nmlistviewPtr2->uChanged & 8) != 0)
                    {
                        CheckState state3 = (((nmlistviewPtr2->uOldState & 0xf000) >> 12) == 1) ? CheckState.Unchecked : CheckState.Checked;
                        CheckState state4 = (((nmlistviewPtr2->uNewState & 0xf000) >> 12) == 1) ? CheckState.Unchecked : CheckState.Checked;
                        if (state4 != state3)
                        {
                            ItemCheckedEventArgs args4 = new ItemCheckedEventArgs(this.Items[nmlistviewPtr2->iItem]);
                            this.OnItemChecked(args4);
                        }
                        int num = nmlistviewPtr2->uOldState & 2;
                        int num2 = nmlistviewPtr2->uNewState & 2;
                        if (num2 == num)
                        {
                            return;
                        }
                        if (this.VirtualMode && (nmlistviewPtr2->iItem == -1))
                        {
                            if (this.VirtualListSize > 0)
                            {
                                ListViewVirtualItemsSelectionRangeChangedEventArgs args5 = new ListViewVirtualItemsSelectionRangeChangedEventArgs(0, this.VirtualListSize - 1, num2 != 0);
                                this.OnVirtualItemsSelectionRangeChanged(args5);
                            }
                        }
                        else if (this.Items.Count > 0)
                        {
                            ListViewItemSelectionChangedEventArgs args6 = new ListViewItemSelectionChangedEventArgs(this.Items[nmlistviewPtr2->iItem], nmlistviewPtr2->iItem, num2 != 0);
                            this.OnItemSelectionChanged(args6);
                        }
                        if ((this.Items.Count == 0) || (this.Items[this.Items.Count - 1] != null))
                        {
                            this.listViewState1[0x10] = false;
                            this.OnSelectedIndexChanged(EventArgs.Empty);
                            return;
                        }
                        this.listViewState1[0x10] = true;
                    }
                    return;
                }
                case -100:
                {
                    System.Windows.Forms.NativeMethods.NMLISTVIEW* nmlistviewPtr = (System.Windows.Forms.NativeMethods.NMLISTVIEW*) m.LParam;
                    if ((nmlistviewPtr->uChanged & 8) != 0)
                    {
                        CheckState currentValue = (((nmlistviewPtr->uOldState & 0xf000) >> 12) == 1) ? CheckState.Unchecked : CheckState.Checked;
                        CheckState newCheckValue = (((nmlistviewPtr->uNewState & 0xf000) >> 12) == 1) ? CheckState.Unchecked : CheckState.Checked;
                        if (currentValue == newCheckValue)
                        {
                            return;
                        }
                        ItemCheckEventArgs ice = new ItemCheckEventArgs(nmlistviewPtr->iItem, newCheckValue, currentValue);
                        this.OnItemCheck(ice);
                        m.Result = (((ice.NewValue == CheckState.Unchecked) ? CheckState.Unchecked : CheckState.Checked) == currentValue) ? ((IntPtr) 1) : IntPtr.Zero;
                    }
                    return;
                }
                case -12:
                    this.CustomDraw(ref m);
                    return;

                case -6:
                    goto Label_0517;

                case -5:
                    break;

                case -3:
                    this.WmNmDblClick(ref m);
                    goto Label_0517;

                case -2:
                    this.WmNmClick(ref m);
                    break;

                default:
                    if (lParam->code == System.Windows.Forms.NativeMethods.LVN_GETDISPINFO)
                    {
                        if (this.VirtualMode && (m.LParam != IntPtr.Zero))
                        {
                            System.Windows.Forms.NativeMethods.NMLVDISPINFO_NOTEXT structure = (System.Windows.Forms.NativeMethods.NMLVDISPINFO_NOTEXT) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLVDISPINFO_NOTEXT));
                            RetrieveVirtualItemEventArgs args7 = new RetrieveVirtualItemEventArgs(structure.item.iItem);
                            this.OnRetrieveVirtualItem(args7);
                            ListViewItem item = args7.Item;
                            if (item == null)
                            {
                                throw new InvalidOperationException(System.Windows.Forms.SR.GetString("ListViewVirtualItemRequired"));
                            }
                            item.SetItemIndex(this, structure.item.iItem);
                            if ((structure.item.mask & 1) != 0)
                            {
                                string text;
                                if (structure.item.iSubItem == 0)
                                {
                                    text = item.Text;
                                }
                                else
                                {
                                    if (item.SubItems.Count <= structure.item.iSubItem)
                                    {
                                        throw new InvalidOperationException(System.Windows.Forms.SR.GetString("ListViewVirtualModeCantAccessSubItem"));
                                    }
                                    text = item.SubItems[structure.item.iSubItem].Text;
                                }
                                if (structure.item.cchTextMax <= text.Length)
                                {
                                    text = text.Substring(0, structure.item.cchTextMax - 1);
                                }
                                if (Marshal.SystemDefaultCharSize == 1)
                                {
                                    Marshal.Copy(Encoding.Default.GetBytes(text + "\0"), 0, structure.item.pszText, text.Length + 1);
                                }
                                else
                                {
                                    Marshal.Copy((text + "\0").ToCharArray(), 0, structure.item.pszText, text.Length + 1);
                                }
                            }
                            if (((structure.item.mask & 2) != 0) && (item.ImageIndex != -1))
                            {
                                structure.item.iImage = item.ImageIndex;
                            }
                            if ((structure.item.mask & 0x10) != 0)
                            {
                                structure.item.iIndent = item.IndentCount;
                            }
                            if ((structure.item.stateMask & 0xf000) != 0)
                            {
                                structure.item.state |= item.RawStateImageIndex;
                            }
                            Marshal.StructureToPtr(structure, m.LParam, false);
                            return;
                        }
                    }
                    else if (lParam->code == -115)
                    {
                        if (this.VirtualMode && (m.LParam != IntPtr.Zero))
                        {
                            System.Windows.Forms.NativeMethods.NMLVODSTATECHANGE nmlvodstatechange = (System.Windows.Forms.NativeMethods.NMLVODSTATECHANGE) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLVODSTATECHANGE));
                            if ((nmlvodstatechange.uNewState & 2) != (nmlvodstatechange.uOldState & 2))
                            {
                                ListViewVirtualItemsSelectionRangeChangedEventArgs args8 = new ListViewVirtualItemsSelectionRangeChangedEventArgs(nmlvodstatechange.iFrom, nmlvodstatechange.iTo - 1, (nmlvodstatechange.uNewState & 2) != 0);
                                this.OnVirtualItemsSelectionRangeChanged(args8);
                                return;
                            }
                        }
                    }
                    else if (lParam->code == System.Windows.Forms.NativeMethods.LVN_GETINFOTIP)
                    {
                        if (this.ShowItemToolTips && (m.LParam != IntPtr.Zero))
                        {
                            System.Windows.Forms.NativeMethods.NMLVGETINFOTIP nmlvgetinfotip = (System.Windows.Forms.NativeMethods.NMLVGETINFOTIP) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLVGETINFOTIP));
                            ListViewItem item4 = this.Items[nmlvgetinfotip.item];
                            if ((item4 != null) && !string.IsNullOrEmpty(item4.ToolTipText))
                            {
                                System.Windows.Forms.UnsafeNativeMethods.SendMessage(new HandleRef(this, lParam->hwndFrom), 0x418, 0, SystemInformation.MaxWindowTrackSize.Width);
                                if (Marshal.SystemDefaultCharSize == 1)
                                {
                                    byte[] bytes = Encoding.Default.GetBytes(item4.ToolTipText + "\0");
                                    Marshal.Copy(bytes, 0, nmlvgetinfotip.lpszText, Math.Min(bytes.Length, nmlvgetinfotip.cchTextMax));
                                }
                                else
                                {
                                    char[] source = (item4.ToolTipText + "\0").ToCharArray();
                                    Marshal.Copy(source, 0, nmlvgetinfotip.lpszText, Math.Min(source.Length, nmlvgetinfotip.cchTextMax));
                                }
                                Marshal.StructureToPtr(nmlvgetinfotip, m.LParam, false);
                                return;
                            }
                        }
                    }
                    else if ((lParam->code == System.Windows.Forms.NativeMethods.LVN_ODFINDITEM) && this.VirtualMode)
                    {
                        System.Windows.Forms.NativeMethods.NMLVFINDITEM nmlvfinditem = (System.Windows.Forms.NativeMethods.NMLVFINDITEM) m.GetLParam(typeof(System.Windows.Forms.NativeMethods.NMLVFINDITEM));
                        if ((nmlvfinditem.lvfi.flags & 1) != 0)
                        {
                            m.Result = (IntPtr) (-1);
                            return;
                        }
                        bool isTextSearch = ((nmlvfinditem.lvfi.flags & 2) != 0) || ((nmlvfinditem.lvfi.flags & 8) != 0);
                        bool isPrefixSearch = (nmlvfinditem.lvfi.flags & 8) != 0;
                        string psz = string.Empty;
                        if (isTextSearch)
                        {
                            psz = nmlvfinditem.lvfi.psz;
                        }
                        Point empty = Point.Empty;
                        if ((nmlvfinditem.lvfi.flags & 0x40) != 0)
                        {
                            empty = new Point(nmlvfinditem.lvfi.ptX, nmlvfinditem.lvfi.ptY);
                        }
                        SearchDirectionHint down = SearchDirectionHint.Down;
                        if ((nmlvfinditem.lvfi.flags & 0x40) != 0)
                        {
                            down = (SearchDirectionHint) nmlvfinditem.lvfi.vkDirection;
                        }
                        if (nmlvfinditem.iStart >= this.VirtualListSize)
                        {
                        }
                        SearchForVirtualItemEventArgs args9 = new SearchForVirtualItemEventArgs(isTextSearch, isPrefixSearch, false, psz, empty, down, nmlvfinditem.iStart);
                        this.OnSearchForVirtualItem(args9);
                        if (args9.Index != -1)
                        {
                            m.Result = (IntPtr) args9.Index;
                            return;
                        }
                        m.Result = (IntPtr) (-1);
                    }
                    return;
            }
            System.Windows.Forms.NativeMethods.LVHITTESTINFO lvhi = new System.Windows.Forms.NativeMethods.LVHITTESTINFO();
            int indexOfClickedItem = this.GetIndexOfClickedItem(lvhi);
            MouseButtons button = (lParam->code == -2) ? MouseButtons.Left : MouseButtons.Right;
            Point position = Cursor.Position;
            position = base.PointToClientInternal(position);
            if (!base.ValidationCancelled && (indexOfClickedItem != -1))
            {
                this.OnClick(EventArgs.Empty);
                this.OnMouseClick(new MouseEventArgs(button, 1, position.X, position.Y, 0));
            }
            if (!this.listViewState[0x80000])
            {
                this.OnMouseUp(new MouseEventArgs(button, 1, position.X, position.Y, 0));
                this.listViewState[0x80000] = true;
            }
            return;
        Label_0517:
            lvhittestinfo2 = new System.Windows.Forms.NativeMethods.LVHITTESTINFO();
            if (this.GetIndexOfClickedItem(lvhittestinfo2) != -1)
            {
                this.listViewState[0x40000] = true;
            }
            this.listViewState[0x80000] = false;
            base.CaptureInternal = true;
        }
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x4e:
                    if (!this.WmNotify(ref m))
                    {
                        break;
                    }
                    return;

                case 0x113:
                    if ((((int) ((long) m.WParam)) != 0x30) || !this.ComctlSupportsVisualStyles)
                    {
                        base.WndProc(ref m);
                    }
                    return;

                case 7:
                    base.WndProc(ref m);
                    if ((!base.RecreatingHandle && !this.ListViewHandleDestroyed) && ((this.FocusedItem == null) && (this.Items.Count > 0)))
                    {
                        this.Items[0].Focused = true;
                    }
                    return;

                case 15:
                    base.WndProc(ref m);
                    base.BeginInvoke(new MethodInvoker(this.CleanPreviousBackgroundImageFiles));
                    return;

                case 0x200:
                    if ((this.listViewState[0x100000] && !this.listViewState[0x80000]) && (Control.MouseButtons == MouseButtons.None))
                    {
                        this.OnMouseUp(new MouseEventArgs(this.downButton, 1, System.Windows.Forms.NativeMethods.Util.SignedLOWORD(m.LParam), System.Windows.Forms.NativeMethods.Util.SignedHIWORD(m.LParam), 0));
                        this.listViewState[0x80000] = true;
                    }
                    base.CaptureInternal = false;
                    base.WndProc(ref m);
                    return;

                case 0x201:
                    this.ItemCollectionChangedInMouseDown = false;
                    this.WmMouseDown(ref m, MouseButtons.Left, 1);
                    this.downButton = MouseButtons.Left;
                    return;

                case 0x202:
                case 0x205:
                case 520:
                {
                    System.Windows.Forms.NativeMethods.LVHITTESTINFO lvhi = new System.Windows.Forms.NativeMethods.LVHITTESTINFO();
                    int indexOfClickedItem = this.GetIndexOfClickedItem(lvhi);
                    if ((!base.ValidationCancelled && this.listViewState[0x40000]) && (indexOfClickedItem != -1))
                    {
                        this.listViewState[0x40000] = false;
                        this.OnDoubleClick(EventArgs.Empty);
                        this.OnMouseDoubleClick(new MouseEventArgs(this.downButton, 2, System.Windows.Forms.NativeMethods.Util.SignedLOWORD(m.LParam), System.Windows.Forms.NativeMethods.Util.SignedHIWORD(m.LParam), 0));
                    }
                    if (!this.listViewState[0x80000])
                    {
                        this.OnMouseUp(new MouseEventArgs(this.downButton, 1, System.Windows.Forms.NativeMethods.Util.SignedLOWORD(m.LParam), System.Windows.Forms.NativeMethods.Util.SignedHIWORD(m.LParam), 0));
                        this.listViewState[0x100000] = false;
                    }
                    this.ItemCollectionChangedInMouseDown = false;
                    this.listViewState[0x80000] = true;
                    base.CaptureInternal = false;
                    return;
                }
                case 0x203:
                    this.ItemCollectionChangedInMouseDown = false;
                    base.CaptureInternal = true;
                    this.WmMouseDown(ref m, MouseButtons.Left, 2);
                    return;

                case 0x204:
                    this.WmMouseDown(ref m, MouseButtons.Right, 1);
                    this.downButton = MouseButtons.Right;
                    return;

                case 0x206:
                    this.WmMouseDown(ref m, MouseButtons.Right, 2);
                    return;

                case 0x207:
                    this.WmMouseDown(ref m, MouseButtons.Middle, 1);
                    this.downButton = MouseButtons.Middle;
                    return;

                case 0x209:
                    this.WmMouseDown(ref m, MouseButtons.Middle, 2);
                    return;

                case 0x2a1:
                    if (!this.HoverSelection)
                    {
                        this.OnMouseHover(EventArgs.Empty);
                        return;
                    }
                    base.WndProc(ref m);
                    return;

                case 0x2a3:
                    this.prevHoveredItem = null;
                    base.WndProc(ref m);
                    return;

                case 0x317:
                    this.WmPrint(ref m);
                    return;

                case 0x204e:
                    this.WmReflectNotify(ref m);
                    return;
            }
            base.WndProc(ref m);
        }
 private void WmNmDblClick(ref Message m)
 {
     if (this.CheckBoxes)
     {
         Point position = Cursor.Position;
         position = base.PointToClientInternal(position);
         System.Windows.Forms.NativeMethods.LVHITTESTINFO lParam = new System.Windows.Forms.NativeMethods.LVHITTESTINFO {
             pt_x = position.X,
             pt_y = position.Y
         };
         int num = (int) System.Windows.Forms.UnsafeNativeMethods.SendMessage(new HandleRef(this, base.Handle), 0x1012, 0, lParam);
         if ((num != -1) && ((lParam.flags & 14) != 0))
         {
             ListViewItem item = this.Items[num];
             item.Checked = !item.Checked;
         }
     }
 }
 private void WmNmClick(ref Message m)
 {
     if (this.CheckBoxes)
     {
         Point position = Cursor.Position;
         position = base.PointToClientInternal(position);
         System.Windows.Forms.NativeMethods.LVHITTESTINFO lParam = new System.Windows.Forms.NativeMethods.LVHITTESTINFO {
             pt_x = position.X,
             pt_y = position.Y
         };
         int num = (int) System.Windows.Forms.UnsafeNativeMethods.SendMessage(new HandleRef(this, base.Handle), 0x1012, 0, lParam);
         if ((num != -1) && ((lParam.flags & 8) != 0))
         {
             ListViewItem item = this.Items[num];
             if (item.Selected)
             {
                 bool flag = !item.Checked;
                 if (!this.VirtualMode)
                 {
                     foreach (ListViewItem item2 in this.SelectedItems)
                     {
                         if (item2 != item)
                         {
                             item2.Checked = flag;
                         }
                     }
                 }
             }
         }
     }
 }
 public ListViewHitTestInfo HitTest(int x, int y)
 {
     int num;
     if (!base.ClientRectangle.Contains(x, y))
     {
         return new ListViewHitTestInfo(null, null, ListViewHitTestLocations.None);
     }
     System.Windows.Forms.NativeMethods.LVHITTESTINFO lParam = new System.Windows.Forms.NativeMethods.LVHITTESTINFO {
         pt_x = x,
         pt_y = y
     };
     if (this.View == System.Windows.Forms.View.Details)
     {
         num = (int) ((long) System.Windows.Forms.UnsafeNativeMethods.SendMessage(new HandleRef(this, base.Handle), 0x1039, 0, lParam));
     }
     else
     {
         num = (int) ((long) System.Windows.Forms.UnsafeNativeMethods.SendMessage(new HandleRef(this, base.Handle), 0x1012, 0, lParam));
     }
     ListViewItem hitItem = (num == -1) ? null : this.Items[num];
     ListViewHitTestLocations none = ListViewHitTestLocations.None;
     if ((hitItem == null) && ((8 & lParam.flags) == 8))
     {
         none = (((ListViewHitTestLocations) 0xf7) & ((ListViewHitTestLocations) lParam.flags)) | ListViewHitTestLocations.AboveClientArea;
     }
     else if ((hitItem != null) && ((8 & lParam.flags) == 8))
     {
         none = (((ListViewHitTestLocations) 0xf7) & ((ListViewHitTestLocations) lParam.flags)) | ListViewHitTestLocations.StateImage;
     }
     else
     {
         none = (ListViewHitTestLocations) lParam.flags;
     }
     if (((this.View == System.Windows.Forms.View.Details) && (hitItem != null)) && (lParam.iSubItem < hitItem.SubItems.Count))
     {
         return new ListViewHitTestInfo(hitItem, hitItem.SubItems[lParam.iSubItem], none);
     }
     return new ListViewHitTestInfo(hitItem, null, none);
 }
 internal void GetSubItemAt(int x, int y, out int iItem, out int iSubItem)
 {
     System.Windows.Forms.NativeMethods.LVHITTESTINFO lParam = new System.Windows.Forms.NativeMethods.LVHITTESTINFO {
         pt_x = x,
         pt_y = y
     };
     int num = (int) System.Windows.Forms.UnsafeNativeMethods.SendMessage(new HandleRef(this, base.Handle), 0x1039, 0, lParam);
     if (num > -1)
     {
         iItem = lParam.iItem;
         iSubItem = lParam.iSubItem;
     }
     else
     {
         iItem = -1;
         iSubItem = -1;
     }
 }
 public ListViewItem GetItemAt(int x, int y)
 {
     System.Windows.Forms.NativeMethods.LVHITTESTINFO lParam = new System.Windows.Forms.NativeMethods.LVHITTESTINFO {
         pt_x = x,
         pt_y = y
     };
     int num = (int) System.Windows.Forms.UnsafeNativeMethods.SendMessage(new HandleRef(this, base.Handle), 0x1012, 0, lParam);
     ListViewItem item = null;
     if ((num >= 0) && ((lParam.flags & 14) != 0))
     {
         item = this.Items[num];
     }
     return item;
 }