重复点创建

本文关键字:创建 | 更新日期: 2023-09-27 18:08:58

我使用MousePosition来尝试确定在触发MouseDown事件后用户移动鼠标的方式。问题是我试图使用点数据类型使一个开始变量,我只希望这个点填充一次数据,但我有它在一个MouseDown,所以我可以使用鼠标参数e.X和e.Y来确定在哪里调用MouseDown事件。下面是我对

的想法的一个例子
public void panel1_MouseDown(object sender, MouseEventArgs e)
{
    Point start = new Point(e.X, e.Y);
}
public void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if(MousePosition.X > start.X)
    {
        Console.WriteLine("you have moved right");
    }
}

那么我如何只创建一次start变量,同时还能让它访问e mouse参数。以及我如何访问panel1_MouseDown和panel1_MouseMove之间的变量?如果你能找到更好的替代方法,那就太好了!谢谢大家的帮助!

重复点创建

如果您不喜欢定义新的类成员(出于某种原因),那么您至少可以这样做:

Point? start = null;
public void panel1_MouseDown(object sender, MouseEventArgs e)
{
    start = new Point(e.X, e.Y);
}
public void panel1_MouseUp(object sender, MouseEventArgs e)
{
    start = null;
}
public void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if(start.HasValue)
      if(MousePosition.X > start.Value.X)
        Console.WriteLine("you have moved right");
}
但为了清晰(和功能),我将有一个额外的布尔变量:
bool mouseIsDown = false;
Point start;
public void panel1_MouseDown(object sender, MouseEventArgs e)
{
    start = new Point(e.X, e.Y);
    mouseIsDown = true;
}
public void panel1_MouseUp(object sender, MouseEventArgs e)
{
    mouseIsDown = false;
}
public void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if(mouseIsDown)
      if(MousePosition.X > start.X)
        Console.WriteLine("you have moved right");
}

将起始点声明为私有类变量

Private Point start;
public void panel1_MouseDown(object sender, MouseEventArgs e)
{
    this.start = new Point(e.X, e.Y);
}
public void panel1_MouseMove(object sender, MouseEventArgs e)
{
        if(MousePosition.X > this.start.X)
        {
            Console.WriteLine("you have moved right");
        }
}