C#中如何实现一个拼图游戏的拖拽交换两个碎片图?
本帖最后由 ilovecomputer66 于 2023-7-29 22:02 编辑我用picbox作为每个随机碎片正方形图的展示容器
我只知道mouseDown能监听到在某个碎片上鼠标按住,但是我想监听按下后拖拽移动,应该监听什么事件?试了下,不是MouseMove也不是Move,因为他俩就触发一次,而不是移动过程中时刻触发 我大致思路就是,先监听按下,然后标记已经按下。然后不知道什么能监听它一直移动,如果能实现,然后在移动过程中,计算与按下时鼠标位置的delta值,从而计算出碎片现在的位置,然后设置其位置为现在的位置
(都是技术版区,请讨论技术问题。然后想比如不做成拖拽,点击交换这种程序员可以离开了) 你为什么要监听按下后拖拽移动这个事件?
没必要啊
按下后,高亮显示被选定的方块
再次按下后,鼠标再次选定的方块,与之前高亮显示的方块对换
再处理一下意外情况就完了。 mouseDown里isDown=true
MouseMove里判断isDown后进行计算和移动
MouseUp里isDown=false mousedown+mousemove 如果您想要在拖动图片的过程中持续监听鼠标移动事件,您可以尝试使用drag事件。这个事件会在鼠标拖动的时候持续触发。
以下是一个基本的示例,展示了如何使用drag事件:
javascript
box.on('drag', function(ev) {
// 在这里添加处理拖动事件的代码
console.log('正在拖动图片:', ev.target);
});
在这个示例中,当您拖动图片时,将会打印出正在被拖动的图片的信息。 ccbbaa 发表于 2023-7-29 14:26
如果您想要在拖动图片的过程中持续监听鼠标移动事件,您可以尝试使用drag事件。这个事件会在鼠标拖动的时候 ...
您推荐是好像是js代码,版主需要是的C#代码。{:1_907:} public partial class MainWindow : Form
{
public MainWindow()
{
InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;
pictureBox1.Cursor = Cursors.SizeAll;
pictureBox1.MouseDown += PictureBox1_MouseDown;
pictureBox1.MouseMove += PictureBox1_MouseMove;
pictureBox1.MouseUp += PictureBox1_MouseUp;
}
private bool _isMouseDown = false;
private Point _startLocation;
private int _startX;
private int _startY;
private void PictureBox1_MouseDown(object? sender, MouseEventArgs e)
{
_isMouseDown = true;
pictureBox1.Capture = true;
_startX = e.X + pictureBox1.Left;
_startY = e.Y + pictureBox1.Top;
_startLocation = pictureBox1.Location;
}
private void PictureBox1_MouseMove(object? sender, MouseEventArgs e)
{
if (!_isMouseDown)
{
return;
}
var x = e.X + pictureBox1.Left;
var y = e.Y + pictureBox1.Top;
var diffX = x - _startX;
var diffY = y - _startY;
var left = diffX + _startLocation.X;
var top = diffY + _startLocation.Y;
pictureBox1.Left = left;
pictureBox1.Top = top;
}
private void PictureBox1_MouseUp(object? sender, MouseEventArgs e)
{
_isMouseDown = false;
pictureBox1.Capture = false;
}
private void Window_Load(object sender, EventArgs e)
{
}
} 本帖最后由 Bszk 于 2023-7-29 15:28 编辑
在win窗口查询中,如果想要实现鼠标离开组件还触发move消息的话,想要在按下中使用SetCapture(组件句柄)捕获鼠标,在不需要的时候ReleaseCapture ()释放鼠标。
关于这两个api,可以去msdn看官方文档
我不玩c#,但是这是win窗口相关的知识,可能c#窗口操作已经涵盖了 adamfh 发表于 2023-7-29 10:14
你为什么要监听按下后拖拽移动这个事件?
没必要啊
我2楼括号里就是提前预料,一定会有你这种程序员,不钻研技术,破坏用户体验只为自己省事
页:
[1]
2