Ach*_*and 2 c# mousemove winforms
我在移动面板上的标签时遇到问题。当我移动这个标签,到达顶部和左侧 (0.0) 时,标签尊重顶部和左侧。花费一半的屏幕,标签超过面板,如图所示。

我的代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我需要标签不超过面板尺寸。代码中应该添加什么?
您需要检查其他边界。
为此,您必须使用包含的维度数据Panel。
本着保持动态的精神,正如您的代码一样,我使用 he Label'sParent而不是仅指一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
为了让它更通用,可以替换Label为Control并让用户Controls使用相同的代码段移动其他人。
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |