WinForm--(简单的实现鼠标矩形多选框选中)

1.根据  heisetoufa 的博客 c# winform 用鼠标画拉出来的虚线框,鼠标框选边框效果 实现的一个效果

 

        private void Form1_Load(object sender, EventArgs e)
        {

            panel1.MouseDown += new MouseEventHandler(MouseDown);
            panel1.MouseUp += new MouseEventHandler(MouseUp);
            panel1.MouseMove += new MouseEventHandler(MouseMove);

        }
        //定义两个变量 
        bool MouseIsDown = false;
        Rectangle MouseRect = Rectangle.Empty; //矩形(为鼠标画出矩形选区)
        #region mouseMove
        //定义三个方法
        private void ResizeToRectangle(object sender, Point p)
        {
            DrawRectangle(sender);
            MouseRect.Width = p.X - MouseRect.Left;
            MouseRect.Height = p.Y - MouseRect.Top;
            DrawRectangle(sender);
        }
        private void DrawRectangle(object sender)
        {
            Rectangle rect = ((Panel)sender).RectangleToScreen(MouseRect);
            ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);
        }

        private void DrawStart(object sender, Point StartPoint)
        {
            ((Panel)sender).Capture = true;
            Cursor.Clip = ((Panel)sender).RectangleToScreen(((Panel)sender).Bounds);
            MouseRect = new Rectangle(StartPoint.X, StartPoint.Y, 0, 0);
        }

        private void MouseDown(object sender, MouseEventArgs e)
        {
            MouseIsDown = true;
            DrawStart(sender, e.Location);
        }

        private void MouseUp(object sender, MouseEventArgs e)
        {
            this.Capture = false;
            Cursor.Clip = Rectangle.Empty;
            MouseIsDown = false;
            DrawRectangle(sender);
            MouseRect = Rectangle.Empty;
        }

        private void MouseMove(object sender, MouseEventArgs e)
        {
            if (MouseIsDown)
                ResizeToRectangle(sender, e.Location);


            foreach (Control button in ((Panel)sender).Controls)
            {
                if (MouseRect.IntersectsWith(button.Bounds)) //相交( MouseRect.Contains  完全包含)
                {
                    button.BackColor = Color.Blue;
                }

            }

        }

功能很粗糙,就是这么个意思,有需要再深入研究!

posted @ 2014-04-08 16:26  咲丶  阅读(6374)  评论(0编辑  收藏  举报