- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- namespace AllTest
- {
- public partial class Form11 : Form
- {
- bool MouseIsDown = false;
- Rectangle MouseRect = Rectangle.Empty;
- public Form11()
- {
- InitializeComponent();
- this.MouseDown += new MouseEventHandler(frmMain_MouseDown);
- this.MouseMove += new MouseEventHandler(frmMain_MouseMove);
- this.MouseUp += new MouseEventHandler(frmMain_MouseUp);
- }
- void frmMain_MouseUp(object sender, MouseEventArgs e)
- {
- this.Capture = false;
- Cursor.Clip = Rectangle.Empty;
- MouseIsDown = false;
- DrawRectangle();
- MouseRect = Rectangle.Empty;
- }
- void frmMain_MouseMove(object sender, MouseEventArgs e)
- {
- if (MouseIsDown)
- ResizeToRectangle(e.Location);
- }
- void frmMain_MouseDown(object sender, MouseEventArgs e)
- {
- MouseIsDown = true;
- DrawStart(e.Location);
- }
- private void ResizeToRectangle(Point p)
- {
- DrawRectangle();
- MouseRect.Width = p.X - MouseRect.Left;
- MouseRect.Height = p.Y - MouseRect.Top;
- DrawRectangle();
- }
- private void DrawRectangle()
- {
- Rectangle rect = this.RectangleToScreen(MouseRect);
- ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);
- }
- private void DrawStart(Point StartPoint)
- {
- this.Capture = true;
- Cursor.Clip = this.RectangleToScreen(new Rectangle(0, 0, ClientSize.Width, ClientSize.Height));
- MouseRect = new Rectangle(StartPoint.X, StartPoint.Y, 0, 0);
- }
- }
- }
(不过你也可以传坐标))
MouseIsDown = true;
DrawStart(e.Location);
在鼠标移动(MouseMove)事件里写
if (MouseIsDown)
ResizeToRectangle(e.Location);
在鼠标释放(MouseUp)事件里写
this.Capture = false;
Cursor.Clip = Rectangle.Empty;
MouseIsDown = false;
DrawRectangle();
MouseRect = Rectangle.Empty;
这样不会覆盖原来的控件,不会重绘控件
如果是加Panel的话
把DrawStart()方法里的Cursor.Clip = this.RectangleToScreen(this.Bounds);
改为Cursor.Clip = this.RectangleToScreen(this.panel1.ClientRectangle));
this.Capture = true;改为 this.panel1.Capture = true;
MouseUp里的 this.Capture = false;改为
this.panel1.Capture = false;
这是设置鼠标筐选时鼠标的移动区域 和控件对鼠标的捕获
Cursor.Clip = this.RectangleToScreen(this.Bounds);
这是设置鼠标筐选时鼠标的移动区域 根据你的需要自己去设置
黑色头发:http://heisetoufa.iteye.com/