当发现另一个标签朝相同方向移动时,停止移动标签

Mritunjay

我在图片框上有很多标签。我想相对于光标移动标签,但是当在移动方向上有另一个标签时,标签应停止移动

这是我的代码

void lbl_MouseClick(object sender, MouseEventArgs e)
    {
        try
        {
            lblCutPaste = sender as Control;
        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
        }
    }

    void lbl_MouseDown(object sender, MouseEventArgs e)
    {
        try
        {
            activeControl = sender as Control;
            previousLocation = e.Location;
            //  preloc = activeControl.Location;
            Cursor = Cursors.Hand;



        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
        }
    }

    void lbl_MouseMove(object sender, MouseEventArgs e)
    {
        try
        {
            bool isCollide = false;
            if (activeControl == null || activeControl != sender)
                return;
            var location = activeControl.Location;
            location.Offset(e.Location.X - previousLocation.X, e.Location.Y - previousLocation.Y);

            if (location.X >= 0 && location.X <= activeControl.Parent.Width - activeControl.Width && location.Y >= 0 && location.Y <= activeControl.Parent.Height - activeControl.Height)
            {
                activeControl.Location = location;

            }
        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
        }
    }

    void lbl_MouseUp(object sender, MouseEventArgs e)
    {
       activeControl = null;
        Cursor = Cursors.Default;

    }
战车

这是一个工作示例;您必须在研究代码后对代码进行修改。将lambda引入事件中应该不难。

首先创建20个,Labels然后将它们添加到上PictureBoxLabel与三个事件相关联。Label当它被拖动时,它为活动对象上色

每个Label都还被添加到一个类级别,List<T>因此我们可以轻松地进行所需的检查。该检查使用LINQ来计数所有重叠的标签。

它使用Rectangle.IntersectsWithPoint.Subtract方法..

List<Label> myLabels = new List<Label>();
Label movingLabel = null;
Point mDown = Point.Empty;

private void button11_Click(object sender, EventArgs e)
{
    Random R = new Random(8);
    Size sz = pictureBox1.ClientSize;
    for (int i = 0; i < 20; i++)
    {
        Label lbl = new Label() {Text = "L " + i};
        lbl.Location = new Point(R.Next(sz.Width), R.Next(sz.Height));
        lbl.Parent = pictureBox1;
        myLabels.Add(lbl);

        lbl.BorderStyle = BorderStyle.FixedSingle;

        lbl.MouseDown += (ss, ee) =>
            {
                movingLabel = lbl;
                lbl.BackColor = Color.Bisque;
                mDown = ee.Location;  
            };

        lbl.MouseMove += (ss, ee) =>
            {
                if (ee.Button == MouseButtons.Left)
                {
                   Point nLoc = Point.Subtract(lbl.Location, 
                                      new Size(mDown.X - ee.X, mDown.Y - ee.Y));
                   Rectangle rlbNew = new Rectangle(nLoc, lbl.Size);
                   var overlapped = myLabels.Where(x => x != lbl && 
                              rlbNew.IntersectsWith(new Rectangle(x.Location, x.Size)));
                   if (overlapped.Count() == 0) lbl.Location = nLoc;
                }
            };

        lbl.MouseUp += (ss, ee) =>
            {
                movingLabel = null;
                lbl.BackColor = Color.Transparent;
            };
    }
}

请注意,我不在乎所创建的对象是否Labels重叠,因此除非您不断拖动直到达到“合法”的对象,否则某些对象确实不能重叠。然后它将跳过重叠的标签并移至新位置。

如果您希望对逻辑进行编码以允许在移动时发生重叠,请将红色设为底色,以表明这样做不可行,MouseUp如果仍然重叠则让其跳回去您将需要为此存储原始位置。但是,将其拖到合法位置可能就足够了,imo。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

LibGdx-将Sprite朝另一个方向移动

在PyQt5中,当单击QStackedWidget上标签上的按钮时,如何移动到另一个标签?

在画布中移动鼠标并显示以相同方式移动的点,但在另一个画布中

单击时从一个标签栏移动到另一个标签栏(带有导航控制器的标签栏)

如何创建分为两半并朝不同方向移动的CSS背景?

将页面上的多个图像朝不同方向移动

IOS 7:透明的Viewcontroller背景超过另一个具有不同方向行为的Viewcontroller

如何将焦点从一个锚标签移动到另一个锚标签?

将控件从一个标签页移动到另一个标签页

可点击的按钮来移动另一个标签

如何将3 a标签移动到另一个元素下(h1标签)

使用 BeautifulSoup 将 html 标签从一个 html 文件移动到另一个

HTML5-当另一个音频标签开始播放时,音频停止

我的提交已复制到另一个项目中,并且我的标签已移动

角色旋转,但仅朝一个方向移动。(统一2d)

如何将不同方向的图像放入具有相同填充的同一个容器中?

使用Manim同时在不同方向上移动N个对象

不能让 Spritenode 永远朝一个方向移动吗?

如何将球向不同方向移动?

当使用jQuery或javascript动态移动另一个div时,如何防止div移动?

播放器对象向一个方向移动但转向了另一个方向

将特定div标签从一个容器移动到同一页面中的另一个容器

在画布中围绕它旋转的另一个圆圈的方向移动圆圈

将角色转向另一个方向左右移动不起作用

标签为粘性时,转到另一个标签后无需隐藏内容

当我选择另一个标签时,标签内容不会消失

删除另一个标签beautifulsoup中的标签

在另一个标签BeautifulSoup之前找到标签

用另一个标签替换特定的标签