在按钮上滑动
在一组按钮上点击鼠标的左键,然后开始移动鼠标,(有点像拖动按钮,但是按钮不需要移动,所以用了滑动一词)这时会触发按钮鼠标移动事件,此时在事件内编程,和想象的有点不一样。
原本以为按下鼠标左键以后,移动鼠标时事件内会更新鼠标所在按钮的位置信息,但是实际不然,此时,按钮对象被锁定在按下鼠标时的那个按钮上,此时获得的按钮位置永远不变,但是光标位置仍在更新,需要通过光标位置判断鼠标所在按钮的位置,可以实现拖动时代替连续点击的效果。
经过对AI提供的测试代码验证后发现:
原来按钮对象提供一个方法,可以通过光标所在位置,判断某个按钮上面是否有鼠标的存在。
终于,略费周折后,实现了在一组按钮上滑动的事件编程代码。
关键代码如下:
private void GridButton_MouseMove(object sender, MouseEventArgs e)
{
//按下鼠标左键以后,移动鼠标时不再更新鼠标所在按钮的位置信息,
//但是光标位置仍在更新,需要通过光标位置判断鼠标所在按钮的位置,
//可以实现拖动点击的效果。
Point currentPos = this.PointToClient(Cursor.Position);
//this.Text = currentPos.X.ToString() + " " + currentPos.Y.ToString();
Button btn = GetButtonAtPoint(currentPos);
Point pos = (Point)btn.Tag;
int row = pos.X, col = pos.Y;
this.Text = #34;行: {row}, 列: {col}, 数字: {(btn.Text == "" ? "无" : btn.Text)}";
}
private Button GetButtonAtPoint(Point point)
{
LastButton = gridButtons[0, 0];
for (int row = 0; row < GridSize; row++)
{
for (int col = 0; col < GridSize; col++)
{
Button btn = gridButtons[row, col];
if (btn.Bounds.Contains(point))
{
LastButton = btn;
return btn;
}
}
}
return LastButton;
}