Esempio n. 1
0
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            if (DesignMode)
            {
                return;
            }
            m_MouseMovePos    = e.Location;
            m_MouseMovePos.X += _hScroll.Value;
            m_MouseMovePos.Y += _vScroll.Value;

            if (_vScroll.IsMouseDown)
            {
                return;
            }
            if (_hScroll.IsMouseDown)
            {
                return;
            }

            int i = 0;

            if (AllowUserToResizeColumns && m_DragRowOrColumn != 2)//调整列宽
            {
                foreach (var item in TableColumns)
                {
                    RectangleF temp = new RectangleF(item.Bounds.Right - 2, 0, 4, item.Bounds.Height);
                    if (temp.Contains(e.Location))
                    {
                        this.Cursor     = Cursors.SizeWE;
                        m_DragColumnPos = i;
                        m_MouseIntent   = MouseIntent.PressMove;
                        return;
                    }
                    i++;
                }
                m_DragColumnPos = -1;
                this.Cursor     = Cursors.Default;
            }
            //this.Cursor = Cursors.Default;
            i = 0;
            int t = -1;

            foreach (var item in _rows)
            {
                if (item.Contains(m_MouseMovePos))
                {
                    t = i;
                    break;
                }
                i++;
            }

            if (e.Button == MouseButtons.Left && m_DragRowOrColumn > -1)
            {
                i = 0;
                if (m_DragRowOrColumn == 1)
                {
                    foreach (var item in TableColumns)
                    {
                        if (item.Bounds.Contains(e.Location))
                        {
                            m_Prepare      = new RectangleF(item.Bounds.Location, new SizeF(2, item.Bounds.Height));
                            m_AfterDragPos = i;
                            m_MouseIntent  = MouseIntent.PressMove;
                            this.Invalidate();
                            return;
                        }
                        i++;
                    }
                }
                else if (m_DragRowOrColumn == 0)
                {
                    //处理行拖放
                    if (t > -1)
                    {
                        m_Prepare = new RectangleF(_rows[t].Location, new SizeF(100, 2));
                        //m_Prepare = new RectangleF(m_MouseMovePos, new SizeF(100, 2));
                        m_AfterDragPos = t;
                        m_MouseIntent  = MouseIntent.PressMove;
                        this.Invalidate();
                        return;
                    }
                }
                else if (m_DragRowOrColumn == 2)
                {
                    float w = m_MouseMovePos.X - m_MouseDownPos.X;
                    if (w == 0)
                    {
                        return;
                    }
                    TableColumns[m_DragColumnPos].Width = (int)(TableColumns[m_DragColumnPos].Bounds.Width + w);
                    this.ResetColumns();
                    this.Invalidate();
                    m_MouseDownPos = m_MouseMovePos;
                    m_MouseIntent  = MouseIntent.PressMove;
                    return;
                    //Console.WriteLine(m_DragColumnPos);
                }
                //this.Invalidate();
            }
            MouseMoveIndex = t;
            //if (m_MouseMoveIndex > -1)
            //this.Invalidate();
        }
Esempio n. 2
0
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);
            if (DesignMode)
            {
                return;
            }

            if (_vScroll.IsMouseDown)
            {
                return;
            }
            if (m_DragRowOrColumn > -1 && m_AfterDragPos != m_BeforeDragPos && m_AfterDragPos > -1 && m_BeforeDragPos > -1)
            {
                //切换位置
                if (m_DragRowOrColumn == 1)
                {
                    TableColumns.Transposition(m_BeforeDragPos, m_AfterDragPos);
                    ResetColumns();
                    OnColumnDragChanged(EventArgs.Empty);
                    m_MouseIntent = MouseIntent.None;
                }
                else
                {
                    m_SelectionIndex = -1;
                    object temp = dataSource[m_BeforeDragPos];
                    dataSource.Remove(temp);
                    dataSource.Insert(m_AfterDragPos, temp);
                    OnRowDragChanged(EventArgs.Empty);
                    m_MouseIntent = MouseIntent.None;
                }
            }

            int         tempIndex  = m_BeforeDragPos;
            int         tempDrag   = m_DragRowOrColumn;
            MouseIntent tempIntent = m_MouseIntent;

            m_MouseIntent     = MouseIntent.None;
            m_DragRowOrColumn = -1;
            m_DragColumnPos   = -1;
            m_AfterDragPos    = -1;
            m_BeforeDragPos   = -1;
            m_Prepare         = Rectangle.Empty;
            m_MouseDownOffset = PointF.Empty;
            this.Cursor       = Cursors.Default;
            if (m_MousePreview != null)
            {
                m_MousePreview.Dispose();
                m_MousePreview = null;
                this.Invalidate();
            }


            switch (tempIntent)
            {
            case MouseIntent.None:    //判断按下位置
                HandleEvent(e);
                break;

            case MouseIntent.MouseDown:    //按下触发 点击事件
                //判断按下位置为行/标题
                if (tempDrag == 1 && tempIndex > -1)
                {
                    //按下位置为 标题行
                    TableColumn item = TableColumns[tempIndex];
                    if (!item.SortColumn)
                    {
                        return;
                    }
                    item.Desc = !item.Desc;
                    OnSortClick(new TableColumnSortEventArgs(item));
                }
                else
                {
                    SelectionIndex = tempIndex;
                    OnSelectionChanged(new SelectionChangeEventArgs(tempIndex));
                }
                break;

            case MouseIntent.PressMove:
                break;

            default:
                break;
            }
        }
Esempio n. 3
0
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            if (DesignMode)
            {
                return;
            }
            m_MouseDownPos    = e.Location;
            m_MouseDownPos.X += _hScroll.Value;
            m_MouseDownPos.Y += _vScroll.Value;

            if (_vScroll.IsMouseDown)
            {
                return;
            }
            if (_hScroll.IsMouseDown)
            {
                return;
            }

            if (e.Button == MouseButtons.Left)
            {
                int i = 0;
                if (m_DragColumnPos > 0)
                {
                    m_DragRowOrColumn = 2;
                    return;
                }

                if (AllowUserToOrderColumns)
                {
                    i = 0;
                    foreach (var item in TableColumns)
                    {
                        if (item.Bounds.Contains(e.Location))
                        {
                            m_DragRowOrColumn = 1;
                            m_MousePreview?.Dispose();
                            m_MousePreview = new Bitmap((int)item.Bounds.Width, (int)item.Bounds.Height);
                            using (Graphics g = Graphics.FromImage(m_MousePreview))
                            {
                                g.Clear(Color.FromArgb(60, Color.White));
                                using (SolidBrush solidBrush = new SolidBrush(this.ForeColor))
                                    item.Draw(g, solidBrush, new RectangleF(0, 0, item.Bounds.Width, item.Bounds.Height));
                            }
                            m_BeforeDragPos   = i;
                            m_MouseDownOffset = new PointF(m_MouseDownPos.X - item.Bounds.X, m_MouseDownPos.Y - item.Bounds.Y);
                            m_MouseIntent     = MouseIntent.MouseDown;
                            return;
                        }
                        i++;
                    }
                }
                //处理行拖放
                i = 0;
                if (AllowUserToOrderRows)
                {
                    foreach (var item in _rows)
                    {
                        if (item.Contains(m_MouseDownPos))
                        {
                            m_DragRowOrColumn = 0;
                            m_MousePreview?.Dispose();
                            m_MousePreview = new Bitmap((int)item.Width, (int)item.Height);
                            using (Graphics g = Graphics.FromImage(m_MousePreview))
                            {
                                g.Clear(Color.FromArgb(60, Color.White));
                                using (SolidBrush solidBrush = new SolidBrush(this.ForeColor))
                                {
                                    Pen pen = new Pen(BorderColor);
                                    DrawRow(g, solidBrush, pen, 0, DataSource[i]);
                                }
                            }
                            m_BeforeDragPos   = i;
                            m_MouseDownOffset = new PointF(m_MouseDownPos.X - item.X, m_MouseDownPos.Y - item.Y);
                            m_MouseIntent     = MouseIntent.MouseDown;
                            return;
                        }
                        i++;
                    }
                }
            }
        }