Exemple #1
0
        /// <param name="g">绘制图面.</param>
        /// <param name="item">要绘制的GroupSubItem</param>
        /// <param name="rect">绘制的区域.只提供起点(x,y),具体大小可以在重载时自行确定.</param>
        /// <returns>下一个GroupItem的起点区域.</returns>
        protected virtual Rectangle DrawSubItem(Graphics g, GroupSubItem item, Rectangle rect)
        {
            //绘制Item
            rect.Height = _SubItemHeight;
            SolidBrush sb;

            if (item.Equals(_MouseOnSubItem))
            {
                sb = new SolidBrush(MouseOnSubItemColor);
            }
            else
            {
                sb = new SolidBrush(this.BackColor);
            }
            g.FillRectangle(sb, rect);

            rect = PaintText(g, item.Text, rect, sb, item.IsOpen);

            item.Bounds = rect;
            rect        = GetNextBounds(rect);
            //绘制子Item
            if (item.IsOpen)
            {
                rect.X += 20;
                foreach (var sitem in item.SubItems)
                {
                    rect = DrawCellItem(g, sitem, rect);
                }
                rect.X -= 20;
            }
            return(rect);
        }
Exemple #2
0
 /// <summary>
 /// 清理GroupSubItem区域.
 /// </summary>
 private void ClearSubItemBounds()
 {
     if (_MouseOnSubItem != null)
     {
         Rectangle rect = _MouseOnSubItem.Bounds;
         rect.Y -= VerticalScroll.Value;
         rect.X  = 0;
         this.Invalidate(rect);
         _MouseOnSubItem = null;
     }
 }
Exemple #3
0
        /// <summary>
        /// 鼠标移动处理.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            _MounsePos = e.Location;
            int index = this.VerticalScroll.Value;

            _MounsePos.X += this.HorizontalScroll.Value;
            _MounsePos.Y += this.VerticalScroll.Value;

            Rectangle rect;

            foreach (var item in _Items)
            {
                if (item.Bounds.Contains(_MounsePos))
                {
                    if (item.Equals(_MouseOnItem))//子项与上一次是相等的.
                    {
                        Debug.WriteLine("Item 与上次一样 ");
                        return;
                    }
                    else
                    {
                        ClearBounds();
                        _MouseOnItem = item;
                        rect         = item.Bounds;
                        rect.Y      -= index;
                        this.Invalidate(rect);
                        Debug.WriteLine("被选中的是Item {0}".FormatWith(item.Bounds));
                        return;
                    }
                }
                else
                {
                    if (item.IsOpen)
                    {
                        foreach (var sitem in item.SubItems)
                        {
                            if (sitem.Bounds.Contains(_MounsePos))
                            {
                                if (sitem.Equals(_MouseOnSubItem))
                                {
                                    Debug.WriteLine("SubItem 与上次一样 ");
                                    return;
                                }
                                else
                                {
                                    ClearBounds();
                                    _MouseOnSubItem = sitem;
                                    rect            = sitem.Bounds;
                                    rect.Y         -= index;
                                    this.Invalidate(rect);
                                    Debug.WriteLine("被选中的是SubItem {0}".FormatWith(sitem.Bounds));
                                    return;
                                }
                            }
                            else
                            {
                                if (sitem.IsOpen)
                                {
                                    foreach (var citem in sitem.SubItems)
                                    {
                                        if (citem.Bounds.Contains(_MounsePos))
                                        {
                                            ClearBounds();
                                            _MouseOnCellItem = citem;
                                            rect             = citem.Bounds;
                                            rect.Y          -= index;
                                            OnMouseOnCellItem(new DataEventArgs <GroupCellItem>(citem));
                                            this.Invalidate(rect);
                                            Debug.WriteLine("被选中的是CellItem {0}".FormatWith(citem.Bounds));
                                            return;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ClearBounds();
            Debug.WriteLine("没有找到任何项");
            foreach (var item in Items)
            {
                Debug.WriteLine(item.Bounds);
            }
        }
Exemple #4
0
 public GroupCellItemCollection(GroupSubItem item)
 {
     _Father = item;
     _Owner  = null;
 }