鼠标画线要用到mousedown、mouseup和mousemove事件,这里先介绍三个事件然后再给出鼠标画线的代码。
1.MouseDown事件
当鼠标指针位于控件上并按下鼠标键时发生。
语法:
public event MouseEventHandler MouseDown
MouseEventHandler:表示将处理窗体、控件或其他组件的MouseDown、MouseUp或 MouseMove事件的方法。
MouseEventHandler委托事件语法:
public delegate void MouseEventHandler (Object sender,MouseEventArgs e)
sender:事件源。
e:包含事件数据的MouseEventArgs。
MouseEventArgs用来构造函数对数,其公共属性及说明如表所示。
表 MouseEventArgs参数属性及说明
属性 | 说明 |
Button | 获取曾按下的是哪个鼠标按钮 |
Clicks | 获取按下并释放鼠标按钮的次数 |
Delta | 获取鼠标轮已转动的制动器数的有符号计数。制动器是鼠标轮的一个凹口 |
Location | 获取鼠标在产生鼠标事件时的位置 |
X | 获取鼠标在产生鼠标事件时的x坐标 |
Y | 获取鼠标在产生鼠标事件时的y坐标 |
示例 MouseDown事件的使用
本示例单击鼠标右键,弹出快捷菜单。
程序主要代码如下。
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
OnMouseDown = true;
if (e.Button == MouseButtons.Right)
{
this.contextMenuStrip1.Show(this, new Point(e.X, e.Y));
}
}
2.MouseUp事件
当鼠标指针在控件上并释放鼠标按键时发生。
语法:
public event MouseEventHandler MouseUp
示例 MouseUp事件的使用
本示例实现的是,程序运行的时候,触发鼠标MouseUp事件,并给变量赋值。
程序主要代码如下。
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
OnMouseDown = false;
}
鼠标画线代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
bool flag = false;//是否按下点击
bool flagmove = false;//是否可以移动后重画
public Form1()
{
InitializeComponent();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (flag)
{
flagmove = true;
}
Point p1 = new Point();
Point p2 = new Point();
p1.X = e.X;
p1.Y = e.Y;
p2.X = PointToClient(MousePosition).X;
p2.Y = PointToClient(MousePosition).Y;
double length;
while (flag)
{
if (flagmove)
{
Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Blue, 0.2f);
g.DrawLine(p, p1, p2);
p1.X = p2.X;
p1.Y = p2.Y;
flagmove = false;
}
else
{
p2.X = PointToClient(MousePosition).X;
p2.Y = PointToClient(MousePosition).Y;
length = Math.Sqrt(Math.Pow(Math.Abs(p1.X - p2.X), 2) + Math.Pow(Math.Abs(p1.Y - p2.Y), 2));
if (length >= 10)
{
flagmove = true;
}
}
}
}
public void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Cursor = Cursors.Cross;
flag = true;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
this.Cursor = Cursors.Default;
flag = false;
flagmove = false;
}
}
}