在运行时移动控件

时间:2014-09-21 07:24:13

标签: c# winforms mousemove

我在面板上移动标签时遇到问题。当我移动此标签时,到达顶部和左侧(0.0),标签尊重顶部和左侧。要花一半的屏幕,标签超出面板,如图所示。

enter image description here

我的代码:

public partial class frmStandard : Form
{
    Point startposition;    
}

public void MouseDown(object sender, MouseEventArgs e)
{
    startposition = e.Location;
}

public void MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left) 
    {   
        ((Label)sender).Left = Math.Max(0, e.X + ((Label)sender).Left - startposition.X);
        ((Label)sender).Top = Math.Max(0, e.Y + ((Label)sender).Top - startposition.Y);
    }
}

我需要标签不超过面板尺寸。代码中应该添加什么?

1 个答案:

答案 0 :(得分:4)

您需要检查其他边框。

您必须使用包含Panel的维度数据。

本着保持动态的精神,正如您的代码已经存在一样,我使用Label的{​​{1}}而不是仅指Parent

Panel

为了使其更加通用,可以将private void MouseMove(object sender, MouseEventArgs e) { Label L = (Label)sender; Rectangle PR = L.Parent.ClientRectangle; if (e.Button == MouseButtons.Left) { L.Left = Math.Min(Math.Max(0, e.X + L.Left - startposition.X), PR.Right - L.Width); L.Top = Math.Min( Math.Max(0, e.Y + L.Top - startposition.Y), PR.Bottom - L.Height); } } 替换为Label并让用户使用相同的代码片段移动其他Control