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; } } }
功能很粗糙,就是这么个意思,有需要再深入研究!