您的位置:首页 > 其它

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

2014-04-08 16:26 288 查看
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;
}

}

}


功能很粗糙,就是这么个意思,有需要再深入研究!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: