winforms 拖放winform控件

yc0p9oo0  于 2023-02-13  发布在  其他
关注(0)|答案(3)|浏览(179)

我想在winform应用程序中拖放一个控件(例如标签)。我看到一些拖放文本的例子,但这不是我想要的。我想让用户能够移动控件。有人能告诉我一些资源或例子吗?谢谢。

jmo0nnb3

jmo0nnb31#

你应该看看如何制作可拖动控件的例子。
在SO中也有一些答案。
查看此Move controls when Drag and drop on panel in C#
这是一个关于如何托管表单设计器的完整示例:
Tailor Your Application by Building a Custom Forms Designer with .NET
很久以前我在Delphi中做过类似的事情,将搜索源代码,将其转换为. NET C#并就此事制作一个wiki页面,因为它最近成为如此流行的问题:)

tmb3ates

tmb3ates2#

据我所知,你想把一个控件放到一个容器中,事实上任何控件都可以充当容器,所以首先你需要启用容器的拖放属性以及你需要拖动的控件的拖动属性。
然后为每个控件编写事件(Candrag、candrop、controladded等),其中包含一些逻辑来保存对象并根据需要显示它们。
比方说,我举一个例子,在这个例子中,你希望把imagetext从combombox拖到picturebox中,然后让picturebox分析文本和目录中的相关文件名,如果存在的话,把那个图像加载到它的目录中。
所以在这里,当你开始从combombox拖动文本时,你必须在candrag事件中写一些逻辑,然后一旦你拖放了,你必须写逻辑来理解添加了什么类型的对象,并在你拖放其他控件的控件中获得与它相关的文本(有点破译)。
对不起,我现在没有代码给予你,但我希望你得到的想法是如何做到的。也许这篇文章可以帮助你?http://vicky4147.wordpress.com/2007/02/04/a-simple-drag-drop-in-winforms/

qgzx9mmu

qgzx9mmu3#

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

相关问题