項目中需要實現一個滑鼠框選的功能,現在將代碼分享出來:
思路:實現三個滑鼠事件 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); } }}