winform鼠标画线

来源:互联网 发布:2016年快递行业数据 编辑:程序博客网 时间:2024/04/28 19:12

 鼠标画线要用到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;
        }
    }
}


 

原创粉丝点击