C# 如何使图片盒可拖动?
我是一个热心的程序员,对堆栈溢出还不熟悉。 我正在尝试用C#构建一个操作系统的原型……只是一个测试 就像我们看到的,我们可以把东西拖到桌面上,放在我为我的操作系统创建桌面的任何地方 那么,我应该如何使图标(图片盒)可以拖动,以及如何保存其位置,以便下次打开桌面时可以在同一位置看到它? 我会喜欢没有任何冻结或那些鬼鬼祟祟的虫子拖动。我想如果,它是接近和顺利的窗口(拖动项目(图标)在桌面上) 谢谢……是的,是的 假设有一个名为“pbxBigCat”的Picturebox(加载一张图片…) 将以下行添加到表单中:C# 如何使图片盒可拖动?,c#,winforms,operating-system,C#,Winforms,Operating System,我是一个热心的程序员,对堆栈溢出还不熟悉。 我正在尝试用C#构建一个操作系统的原型……只是一个测试 就像我们看到的,我们可以把东西拖到桌面上,放在我为我的操作系统创建桌面的任何地方 那么,我应该如何使图标(图片盒)可以拖动,以及如何保存其位置,以便下次打开桌面时可以在同一位置看到它? 我会喜欢没有任何冻结或那些鬼鬼祟祟的虫子拖动。我想如果,它是接近和顺利的窗口(拖动项目(图标)在桌面上) 谢谢……是的,是的 假设有一个名为“pbxBigCat”的Picturebox(加载一张图片…) 将以下行添
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
然后为pbxBigCat MouseDown事件编写事件处理程序:
private void pbxBigCat_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(pbxBigCat.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
如果你测试它,你会发现它是有效的。有关更多信息(如保存职位等),我参考
这是另一种可能性(现在我们有了一个名为label1的标签)
从上述SO文章的示例中提取的所有内容。wpf?winforms?可能是web?C#,winforms bro.。我原以为代码可以很好地工作,但实际上什么都没有发生,我甚至在表单上尝试过,您给我的推荐链接中没有关于如何保存职位的信息。然后您没有阅读完整的线程。您可以使用mousemove事件获取实际位置,然后保存它以供使用。我再次尝试,它正在运行。我可以在图片周围移动。请查看新的替代方法以满足您的要求。谢谢兄弟。另一种方法非常有效。你是最棒的。非常感谢。
public partial class Form1 : Form
{
private bool mouseDown;
private Point lastLocation;
public Form1()
{
InitializeComponent();
}
private void pbxBigCat_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseDown = true;
lastLocation = e.Location;
}
}
private void pbxBigCat_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
pbxBigCat.Location = new Point((pbxBigCat.Location.X - lastLocation.X + e.X), (pbxBigCat.Location.Y - lastLocation.Y) + e.Y);
label1.Text = pbxBigCat.Location.X.ToString() + "/" + pbxBigCat.Location.Y.ToString();
}
}
private void pbxBigCat_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
}
}