2016-05-19 103 views
-4

我是一个热心的程序员,也是堆栈溢出的新手。 我想在C#中建立一个OS(操作系统)的原型...只是一个测试。如何制作一个picturebox拖动?

就像我们看到的,我们可以在桌面上拖动东西并将它放在任何位置,我正在为我的操作系统创建桌面。

那么我该如何制作一个图标(图片框)拖拽功能,以及如何保存它的位置,以便下次打开我的桌面时,我可以在同一个地方看到它? 我很喜欢拖着没有任何冻结或那些鬼鬼祟祟的错误。我很想如果它是接近和光滑如Windows中的那些(拖动桌面项目(图标))..

谢谢...

+0

wpf?的WinForms?也许是网络? –

+0

C#,winforms bro .. –

回答

0

是的,它是。

假设一个PictureBox名为 “pbxBigCat”(用pPicture加载...)

添加此行到您的窗体:

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); 
     } 
    } 

如果你测试它,你会选择它的工作。欲了解更多信息(如保存位置等),我要参考,Make a borderless form movable?

另一种可能做到这一点(现在我们已经称为标签Label1)的例子得出

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; 
    } 
} 

一切的SO提到文章。

+0

我以为代码可以很好地工作,但没有什么真正发生,我甚至在一个表单上试了一下,你给我的推荐链接中没有关于如何保存位置的信息。 –

+0

然后你没有阅读完整的主题。您可以使用mousemove事件来获取实际位置,然后将其保存用于您的目的。 – nabuchodonossor

+0

我又试了一遍,它正在运行。我可以在图片中移动。 – nabuchodonossor