拖放WinForm控件

8

我希望在WinForm应用程序中拖放控件(例如标签)。我看到了一些关于拖放文本的示例,但这不是我想要的。我希望用户可以移动控件。有没有人能指导我一些资源或示例?谢谢。


你只是想重新安置控件,还是需要“拖放”功能来传输信息? - Random Dev
3
这里提供了一个有用的简单扩展程序,可以实现可拖动WinForms控件。 - Renatas M.
请参阅我在Code Project上的文章:www.codeproject.com/Articles/36412/Drag-and-Drop-ListBox。但是,仅仅在窗体上移动标签并不是拖放! - Olivier Jacot-Descombes
3个回答

3

Davide Piras,如果您能展示如何托管表单设计器比添加代码更好地允许控件移动并保存新位置以供以后加载表单,那就太好了。顺便说一句,原始链接已经过时。一个可能的链接是https://blogs.msdn.microsoft.com/rprabhu/2004/06/15/designer-hosting-in-whidbey/?replytocom=5005#respond但是替代方案并不是很有用,因为它没有显示如何发出C#代码或设计师界面可以做什么。仍然有很多实现细节被省略了。 - gg89

2
据我所知,您希望放置控件的位置被称为容器,实际上任何控件都可以充当容器。因此,首先需要启用这个容器的拖放属性以及您需要拖动的控件的拖放属性。
然后,为每个控件编写事件(Candrag、candrop、controladded等),其中包含一些逻辑来持有对象并根据需要显示它们。
例如,如果您想从组合框中拖动图像文本到图片框中,然后让图片框分析文本并在目录中查找相关文件名,并在其中加载该图像,则必须在Candrag事件中编写一些逻辑。然后,一旦您释放控件,就必须编写一些逻辑来了解添加了什么类型的对象,并获取与其相关的文本(类似于解密)。
对不起,现在我没有代码可以给您,但我希望您明白如何完成这项操作。也许这篇文章可以帮到您? http://vicky4147.wordpress.com/2007/02/04/a-simple-drag-drop-in-winforms/

实际上,你可以这样做,但你不会真的将控件放在按钮或复选框中。只有表单、面板和其他少数容器是好的选择。 - Davide Piras
是的,也许我们不需要这样做,因为将控件拖放到文本框中没有任何用处。毕竟,文本框只能显示已经存在的文本(如果有的话)。所以这样做没有意义 :)。 - Zenwalker

0
    bool draging = false;
    int curPosX, curPosY;
    private void label2_MouseDown(object sender, MouseEventArgs e)
    {
        draging = true;
        curPosX = Cursor.Position.X;
        curPosY = Cursor.Position.Y;
    }
    private void label2_MouseMove(object sender, MouseEventArgs e)
    {
        if (draging)
        {
            label2.Left += Cursor.Position.X - curPosX;
            curPosX = Cursor.Position.X;
            label2.Top += Cursor.Position.Y - curPosY;
            curPosY = Cursor.Position.Y;
        }
    }
    private void label2_MouseUp(object sender, MouseEventArgs e)
    {
        draging = false;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接