/// <summary> /// 将项插入 CharmCatalogueList 的指定索引处 /// </summary> /// <param name="index"></param> /// <param name="item"></param> public void Insert(int index, CatalogListBoxItem item) { if (item == null) { throw new ArgumentNullException("item"); } Owner.OldItems.Insert(index, item); }
/// <summary> /// 向 CharmCatalogueList 的项列表添加项 /// </summary> /// <param name="item"></param> /// <returns></returns> public int Add(CatalogListBoxItem item) { if (item == null) { throw new ArgumentException("item"); } return(Owner.OldItems.Add(item)); }
/// <summary> /// 引发 MouseMove 事件 /// </summary> /// <param name="e">包含事件数据的 MouseEventArgs</param> protected override void OnMouseMove(MouseEventArgs e) { bool isChange = false; // 是否改变标识符 base.OnMouseMove(e); for (int i = 0; i < Items.Count; i++) { Rectangle bounds = GetItemRectangle(i); if (bounds.Contains(e.X, e.Y)) { if (e.X > 445 && e.X < 545 && e.Y > (27 + bounds.Y) && e.Y < (57 + bounds.Y)) { if (buttonHighlightIndex != i) { buttonHighlightIndex = i; isChange = true; } } else if (e.X > 330 && e.X < 410 && e.Y > (45 + bounds.Y) && e.Y < (65 + bounds.Y)) { if (Cursor != Cursors.Hand) { Cursor = Cursors.Hand; } } else { if (Cursor != Cursors.Arrow) { Cursor = Cursors.Arrow; } if (buttonHighlightIndex == i) { buttonHighlightIndex = -1; isChange = true; } } if (Items[i] != mMouseItem) { mMouseItem = Items[i]; isChange = true; } } if (isChange) { break; } } if (isChange) { Invalidate(); } }
/// <summary> /// 选中项被改变事件 /// </summary> /// <param name="e"></param> protected override void OnSelectedIndexChanged(EventArgs e) { // 判断不为主分类标签才执行事件 if (!Items[SelectedIndex].IsClass) { mMouseItem = Items[SelectedIndex]; mClassName = mMouseItem.Text; base.OnSelectedIndexChanged(e); } else { // 分类表项被单击 // 获取分类展开标识、分类ID bool isExpand = Items[SelectedIndex].IsExpand; int classID = Items[SelectedIndex].ClassID; // 判断当前展开状态 if (isExpand) { // 当前为展开状态,需要闭合 for (int i = Items.Count - 1; i >= 0; i--) { if (Items[i].ClassID == classID && !Items[i].IsClass) { mHideItems.Insert(0, Items[i]); Items.RemoveAt(i); } } // 设置展开状态为假 Items[SelectedIndex].IsExpand = false; } else { // 当前为闭合状态,需要展开 for (int i = mHideItems.Count - 1; i >= 0; i--) { if ((mHideItems[i]).ClassID == classID) { Items.Insert(SelectedIndex + 1, mHideItems[i]); mHideItems.RemoveAt(i); } } // 设置展开状态为真 Items[SelectedIndex].IsExpand = true; } } // 重绘列表 Invalidate(); }
/// <summary> /// 选中项被改变事件 /// </summary> /// <param name="e"></param> protected override void OnSelectedIndexChanged(EventArgs e) { // 判断不为主分类标签才执行事件 if (!Items[SelectedIndex].IsClass) { mMouseItem = Items[SelectedIndex]; mClassName = mMouseItem.Text; base.OnSelectedIndexChanged(e); } else { // 分类表项被单击 // 获取分类展开标识、分类ID bool isExpand = Items[SelectedIndex].IsExpand; int classID = Items[SelectedIndex].ClassID; // 判断当前展开状态 if (isExpand) { // 当前为展开状态,需要闭合 for (int i = Items.Count - 1; i >= 0; i--) { if (Items[i].ClassID == classID && !Items[i].IsClass) { mHideItems.Insert(0, Items[i]); Items.RemoveAt(i); } } // 设置展开状态为假 Items[SelectedIndex].IsExpand = false; } else { // 当前为闭合状态,需要展开 for (int i = mHideItems.Count - 1; i >= 0; i--) { if ((mHideItems[i]).ClassID == classID) { Items.Insert(SelectedIndex + 1,mHideItems[i]); mHideItems.RemoveAt(i); } } // 设置展开状态为真 Items[SelectedIndex].IsExpand = true; } } // 重绘列表 Invalidate(); }
/// <summary> /// 引发 MouseMove 事件 /// </summary> /// <param name="e">包含事件数据的 MouseEventArgs</param> protected override void OnMouseMove(MouseEventArgs e) { bool isChange = false; // 是否改变标识符 base.OnMouseMove(e); for (int i = 0; i < Items.Count; i++) { Rectangle bounds = GetItemRectangle(i); if (bounds.Contains(e.X, e.Y)) { if (e.X > 445 && e.X < 545 && e.Y > (27 + bounds.Y) && e.Y < (57 + bounds.Y)) { if (buttonHighlightIndex != i) { buttonHighlightIndex = i; isChange = true; } } else if (e.X > 330 && e.X < 410 && e.Y > (45 + bounds.Y) && e.Y < (65 + bounds.Y)) { if (Cursor != Cursors.Hand) Cursor = Cursors.Hand; } else { if (Cursor != Cursors.Arrow) Cursor = Cursors.Arrow; if (buttonHighlightIndex == i) { buttonHighlightIndex = -1; isChange = true; } } if (Items[i] != mMouseItem) { mMouseItem = Items[i]; isChange = true; } } if (isChange) break; } if (isChange) { Invalidate(); } }
/// <summary> /// 从集合中移除指定的对象 /// </summary> /// <param name="item"></param> public void Remove(CatalogListBoxItem item) { Owner.OldItems.Remove(item); }
/// <summary> /// 将项插入 CharmCatalogueList 的指定索引处 /// </summary> /// <param name="index"></param> /// <param name="item"></param> public void Insert(int index, CatalogListBoxItem item) { if (item == null) { throw new ArgumentNullException("item"); } Owner.OldItems.Insert(index, item); }
/// <summary> /// 返回指定项在集合中的索引 /// </summary> /// <param name="item"></param> /// <returns></returns> public int IndexOf(CatalogListBoxItem item) { return Owner.OldItems.IndexOf(item); }
/// <summary> /// 将整个集合复制到现有的数组集合中,从该数组的指定位置开始复制 /// </summary> /// <param name="destination"></param> /// <param name="arrayIndex"></param> public void CopyTo(CatalogListBoxItem[] destination, int arrayIndex) { Owner.OldItems.CopyTo(destination, arrayIndex); }
/// <summary> /// 确定指定的项是否位于集合内 /// </summary> /// <param name="item"></param> /// <returns></returns> public bool Contains(CatalogListBoxItem item) { return Owner.OldItems.Contains(item); }
/// <summary> /// 向 CharmCatalogueList 的项列表添加项 /// </summary> /// <param name="item"></param> /// <returns></returns> public int Add(CatalogListBoxItem item) { if (item == null) { throw new ArgumentException("item"); } return Owner.OldItems.Add(item); }
/// <summary> /// 引发 Paint 事件 /// </summary> /// <param name="e">包含事件数据的 PaintEventArgs</param> protected override void OnPaint(PaintEventArgs e) { // 获取绘制对象 Graphics g = e.Graphics; // 循环绘制每项 for (int i = 0; i < Items.Count; i++) { // 获取表项工作区矩形 Rectangle itemRect = GetItemRectangle(i); // 获取当前绘制的表项 CatalogListBoxItem item = Items[i]; // 绘制表项分割线 g.DrawLine(Pens.LightGray, new Point(0, itemRect.Top), new Point(Width, itemRect.Top)); // 绘制表项背景 g.DrawImage(Resources.Catalog_normal, new Rectangle(new Point(0, itemRect.Y), new Size(189, 33))); // 第1项需要绘制特殊背景 if (i == 0) { g.DrawImage(Resources.Catalog_First, new Rectangle(new Point(0, itemRect.Y), new Size(189, 33))); } ; // 判断该表项是否为分类 if (item.IsClass) { // 绘制展开/收缩图标 if (item.IsExpand) { g.DrawImage(Resources.catalog_class_expand, new Rectangle(new Point(itemRect.Left + 8, itemRect.Y + 11), new Size(12, 12))); } else { g.DrawImage(Resources.catalog_class_collapse, new Rectangle(new Point(itemRect.Left + 8, itemRect.Y + 11), new Size(12, 12))); }; // 绘制表项标题文本 g.DrawString(item.Text, new Font("微软雅黑", 10, FontStyle.Bold), Brushes.DarkBlue, itemRect.Left + 25, itemRect.Top + 7); } else { // 判断是否为选中项 if (SelectedIndex == i) { // 绘制现行选中项 g.DrawImage(Resources.Catalog_pushed, new Rectangle(new Point(0, itemRect.Y), new Size(189, 33))); if (item.StatusImages[2] != null) { g.DrawImage(item.StatusImages[2], new Rectangle(new Point(25, itemRect.Y + 7), item.StatusImages[0].Size)); g.DrawString(item.Text, new Font("微软雅黑", 9, FontStyle.Bold), Brushes.White, itemRect.Left + 55, itemRect.Top + 7); } else { g.DrawString(item.Text, new Font("微软雅黑", 9, FontStyle.Bold), Brushes.White, itemRect.Left + 50, itemRect.Top + 7); } } else { // 非现行选中项 // 判断是否为高亮项,是则绘制高亮背景 if (mMouseItem == Items[i]) { g.DrawImage(Resources.Catalog_hover, new Rectangle(new Point(0, itemRect.Y), new Size(189, 33))); if (item.StatusImages[1] != null) { g.DrawImage(item.StatusImages[1], new Rectangle(new Point(25, itemRect.Y + 7), item.StatusImages[0].Size)); g.DrawString(item.Text, new Font("微软雅黑", 9), Brushes.Black, itemRect.Left + 55, itemRect.Top + 7); } else { g.DrawString(item.Text, new Font("微软雅黑", 9), Brushes.Black, itemRect.Left + 50, itemRect.Top + 7); } } else if (item.StatusImages[0] != null) { g.DrawImage(item.StatusImages[0], new Rectangle(new Point(25, itemRect.Y + 7), item.StatusImages[0].Size)); g.DrawString(item.Text, new Font("微软雅黑", 9), Brushes.Black, itemRect.Left + 55, itemRect.Top + 7); } else { g.DrawString(item.Text, new Font("微软雅黑", 9), Brushes.Black, itemRect.Left + 50, itemRect.Top + 7); } } } } //base.OnPaint(e); }
/// <summary> /// 从集合中移除指定的对象 /// </summary> /// <param name="item"></param> public void Remove(CatalogListBoxItem item) { Owner.OldItems.Remove(item); }
/// <summary> /// 返回指定项在集合中的索引 /// </summary> /// <param name="item"></param> /// <returns></returns> public int IndexOf(CatalogListBoxItem item) { return(Owner.OldItems.IndexOf(item)); }
/// <summary> /// 确定指定的项是否位于集合内 /// </summary> /// <param name="item"></param> /// <returns></returns> public bool Contains(CatalogListBoxItem item) { return(Owner.OldItems.Contains(item)); }