gpt4 book ai didi

c# - 如何在运行时移动 mousemove 上的控件?

转载 作者:太空宇宙 更新时间:2023-11-03 21:59:50 26 4
gpt4 key购买 nike

我有一个 WinForm 应用程序,我正在尝试使用 MouseMove 事件 移动 Form 中的 pictureBox,但是当我首先是 pictureBox ,它的位置以一种毫无意义的方式发生变化,然后在移动 pictureBox Location 时正确移动。

它是一个包含图片框 picBox 的面板名称 OuterPanel,这里我使用的代码是:

private void picBox_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point p = OuterPanel.PointToClient(MousePosition);
picBox.Location = this.PointToClient(p);
}
}

P.S : 目标是在放大后移动图像,如 windows 照片查看器

enter image description here

更新:ConvertFromChildToForm 方法

private Point ConvertFromChildToForm(int x, int y,Control control)
{
Point p = new Point(x, y);
control.Location = p;
return p;
}

最佳答案

您必须管理三个事件才能正确完成:

  • 鼠标按下
  • 鼠标移动
  • MouseUp

Here is a Related SO Question..

picBox 的代码:

private void picBox_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point p = ConvertFromChildToForm(e.X, e.Y, picBox);
iOldX = p.X;
iOldY = p.Y;
iClickX = e.X;
iClickY = e.Y;
clicked = true;
}
}

private void picBox_MouseMove(object sender, MouseEventArgs e)
{
if (clicked)
{
Point p = new Point(); // New Coordinate
p.X = e.X + picBox.Left;
p.Y = e.Y + picBox.Top;
picBox.Left = p.X - iClickX;
picBox.Top = p.Y - iClickY;
}
}

private void picBox_MouseUp(object sender, MouseEventArgs e)
{
clicked = false;
}

private Point ConvertFromChildToForm(int x, int y, Control control)
{
Point p = new Point(x, y);
control.Location = p;
return p;
}

ConvertFromChildToForm 方法来自 Mur Haf Soz

关于c# - 如何在运行时移动 mousemove 上的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10662363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com