如何确定鼠标在哪里被点击的位置

时间:2015-08-16 18:03:57

标签: c#

我在C#中制作国际象棋游戏,我使用64 pictureBox来显示棋盘。现在,我试图找出如何确定用户点击的位置,以允许用户通过单击不同的图块/图片框来移动片段。我是C#的新手,但我试图通过检测鼠标点击时的位置来做到这一点。我一直在使用:

void MainFormClick(object sender, EventArgs e){
            Point mousePosition = pictureBox1.PointToClient(Cursor.Position); //pictureBox1 is in upper-left
            int indexClicked = (mousePosition.X / tileSize) + (8 * (mousePosition.Y / tileSize));
            if (indexClicked >= 0 && indexClicked <= 63){
                //do code things?
            }
            this.Text = "Chess - " + indexClicked;
        }

我认为这不起作用,因为用户实际上并没有点击表格,而是在图片框上。我宁愿不做64 pictureBox*Click方法,那么我应该采用其他方式做这个或我应该使用的方法吗?

编辑:我刚看了How to get control under mouse cursor。我的代码需要稍微更改一下,以便更好地确定鼠标点击时哪个图片框,但我真正的问题是单击图片盒并不会出现上述方法。无论何时点击鼠标,我都在寻找一种运行代码块的方法,无论它点击什么控件或部分表单。

3 个答案:

答案 0 :(得分:2)

我可能只是使用普通的Click事件。 Pictureboxes有一个可以绑定的Click事件。我不确定你是如何添加它们的,但对于64个我可能会在循环中动态添加它们。在创建每个事件时,将Click事件绑定到公共处理程序。为每个控件命名,以便轻松找出它所在的位置。然后在处理程序中,您将获得对单击的图片框的对象引用,并可以从中找出要执行的操作。

答案 1 :(得分:1)

你能做的是:

  1. 创建64个图片框,并将其命名为squareA1squareF4等等

  2. 创建Click事件处理程序

  3. 将此事件处理程序附加到设计器

  4. 中的所有图片框
  5. 使用对象sender查找调用的图片框事件

  6. 代码可能如下所示:

        private void square_Click(object sender, EventArgs e)
        {
            PictureBox target = sender as PictureBox;
            MessageBox.Show(target.Name); // displays pictureBox name
        }
    

    设计师自动添加到每个图片框的代码:

    this.squareA2.Click += new System.EventHandler(this.square_Click);
    

    或者你可以在一个循环中创建所有64个图片框,计算它们的位置,并将这个事件处理程序附加到每个图片框......

答案 2 :(得分:0)

您已经在计算鼠标光标所在的位置,因此您应该更改为使用整个电路板的1个大图片框并将点击事件连接到您发布的方法。