c# - 如何确定鼠标点击的位置

标签 c#

我正在用 C# 制作国际象棋游戏,我使用 64 个 pictureBox 来显示棋盘。现在,我试图弄清楚如何确定用户单击的位置以允许用户通过单击不同的图 block /图片框来移动片段。我是 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 .我的代码需要稍微修改一下,以便更好地确定鼠标在单击时位于哪个 pictureBox 上,但我真正的问题是,单击 pictureBoxes 似乎并没有运行上述方法。我正在寻找一种方法来在单击鼠标时运行一段代码,而不管它单击的是什么控件或表单的一部分。

最佳答案

我可能只使用普通的 Click 事件。图片框有一个您可以绑定(bind)的 Click 事件。我不确定您是如何添加它们的,但是对于其中的 64 个,我可能会在循环中动态添加它们。在创建每个事件时,将 Click 事件绑定(bind)到一个公共(public)处理程序。以易于找出其所在位置的方式命名每个控件。然后在处理程序中,您将获得对被单击的图片框的对象引用,并可以从那里确定要做什么。

关于c# - 如何确定鼠标点击的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32038274/

相关文章:

c# - 我收到此错误无法将字符串隐式转换为 system.data.datatable

c# - Vector3.Lerp 无法在我的相机上工作

c# - 如何每 20 天启动一些方法 (Windows Phone)

c# - Unity 中的按钮,不使用 UI?

c# - 为什么 System.Windows.Forms.Control 没有标记为可序列化?

c# - XAML 中框架的 System.InvalidCastException

c# - 与 IEnumerable<T> 实现相关的显式接口(interface)实现?

c# - 是否有适用于 C#/.NET 的跨平台 GUI 框架?

c# - 我可以使用 Jenkins 在 Ubuntu 上构建 C# 项目吗?

c# - 打开默认邮件客户端和附件