项目中需要实现一个鼠标框选的功能,现在将代码分享出来:
思路:实现三个鼠标事件 MouseDown,MouseMove,MouseUp, 至于框选后需要实现什么功能则可以在MouseUp中调用
完整代码如下:
新建一个winform 窗体程序,修改窗体的BehindCode即可。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinfrmMouseFrameSelect
{
public partial class MFramSelctDemo : Form
{
private bool mouseIsDown = false;
private Rectangle mouseRect = Rectangle.Empty;
public MFramSelctDemo()
{
InitializeComponent();
}
private void MFramSelctDemo_MouseDown(object sender, MouseEventArgs e)
{
mouseIsDown = true;
DrawStart(e.Location);
}
private void MFramSelctDemo_MouseMove(object sender, MouseEventArgs e)
{
if (mouseIsDown)
ResizeToRectangle(e.Location);
}
private void MFramSelctDemo_MouseUp(object sender, MouseEventArgs e)
{
Capture = false;
Cursor.Clip = Rectangle.Empty;
mouseIsDown = false;
DrawRectangle();
mouseRect = Rectangle.Empty;
}
/// <summary>
/// 初始化选择框
/// </summary>
/// <param name="StartPoint"></param>
private void DrawStart(Point StartPoint)
{
this.Capture = true;
//指定工作区为整个控件
Cursor.Clip = RectangleToScreen(new Rectangle(0, 0, ClientSize.Width, ClientSize.Height));
mouseRect = new Rectangle(StartPoint.X, StartPoint.Y, 0, 0);
}
/// <summary>
/// 在鼠标移动的时改变选择框的大小
/// </summary>
/// <param name="p">鼠标的位置</param>
private void ResizeToRectangle(Point p)
{
DrawRectangle();
mouseRect.Width = p.X - mouseRect.Left;
mouseRect.Height = p.Y - mouseRect.Top;
DrawRectangle();
}
/// <summary>
/// 绘制选择框
/// </summary>
private void DrawRectangle()
{
Rectangle rect = RectangleToScreen(mouseRect);
ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14827.html