繁体   English   中英

C#中的鼠标事件

[英]Mouse Event in C#

我正在尝试用C#构建一个Checkers / Drafts游戏。 该项目使用Windows窗体构建。

我做的是分解游戏板。 所以我有一个“董事会”课程。 和“BoardSquare”类(此类在正确的位置和颜色绘制正方形)

该板由8 X 8 BoardSquare构建。

我想到了这个解决方案,广场需要知道它是否为空,如果它不是空的,则意味着它上面有一个“GameSoldier”。

因此,当我想将士兵移动到另一个方格时,我需要点击当前的方格以获得GameSoldier,然后按下目标方块。

所以我想要做的是在BoardSquare类中添加鼠标功能以获取方块的属性,比如位置。 有任何想法吗?

单击板时,可以从EventArgs获取光标的坐标。 要将这些坐标转换为电路板上的正方形,您必须将图块从左上角到右下角跨行排列,并将它们存储在索引列表或数组中。

X坐标(在“tiles”中)是Math.Floor(X_Clicked / TileWidth)

Y坐标是Math.Floor(Y_Clicked / TileHeight)

例如,如果您的图块宽50像素,高50像素,并且用户点击(329,186),那么这将是以下图块:

329/50 = 6,58 = 6

186/50 = 3,72 = 3

单击(6,3)处的图块。 要将其转换为列表/数组中的索引:

x +(y * tiles_in_a_row)= 6 +(3 * 8)= 30,因此单击了Tile [30]。

请记住,这是一个从零开始的坐标系,因此第一个图块位于(0,0)。

有几种方法可以解决这个问题,你的boardsquare类可能会妨碍简单的方法,因为它会成为焦点。

当你点击一个占用的棋盘广场时,它会发生鼠标事件。 它在板上的位置可以通过它的顶部/高度和左/宽度来识别,然后你可以将它传递给板上定义的BoardSquareSelected事件处理程序。 当你点击一个未占用的方形鼠标位置是x /方形宽度,y /平方高度你需要更多的逻辑,第一次点击被占用,第二次不合法移动等。 你也可以看一下拖放衍生物。 但就个人而言,我将摆脱将boardquare作为一个组成部分。 如果board有一个8x8的正方形数组,你使用Invalidate(rect)来避免在任何更改时重绘整个东西,你真的不需要它。 然后,所有选择的东西都​​由董事会类完全封装。

你想要做的是为你正在渲染的控件的MouseClick事件添加一个Eventhandler。在该事件的EventArgs中,你将能够检索鼠标坐标。 然后,您可以将该信息与控件本身的大小相结合,以计算已单击的方块。

以下是一些更多信息:

获取鼠标点击DoubleClick事件的位置/按钮

(尤其是穆斯的答案)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM