我在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
方法,那么我应该采用其他方式做这个或我应该使用的方法吗?
答案 0 :(得分:2)
我可能只是使用普通的Click事件。 Pictureboxes有一个可以绑定的Click事件。我不确定你是如何添加它们的,但对于64个我可能会在循环中动态添加它们。在创建每个事件时,将Click事件绑定到公共处理程序。为每个控件命名,以便轻松找出它所在的位置。然后在处理程序中,您将获得对单击的图片框的对象引用,并可以从中找出要执行的操作。
答案 1 :(得分:1)
你能做的是:
创建64个图片框,并将其命名为squareA1
,squareF4
等等
创建Click
事件处理程序
将此事件处理程序附加到设计器
使用对象sender
查找调用的图片框事件
代码可能如下所示:
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个大图片框并将点击事件连接到您发布的方法。