我有一个应用程序,用户可以在其中拖动表单上的控件。但他们要求我提供 Snap-To 线以使控件的对齐更容易。我不知道 snep-to 行以及如何实现它们 - 我看过:
http://msdn.microsoft.com/en-us/library/ms752100.aspx Adorner 的,但它说它只适用于 WPF。我在 WinForms 中尝试过,但(如预期的那样)没有用。
如何在我的应用程序中获得对齐线(类似于 VS 中的线)?
谢谢
贝尔
我有一个应用程序,用户可以在其中拖动表单上的控件。但他们要求我提供 Snap-To 线以使控件的对齐更容易。我不知道 snep-to 行以及如何实现它们 - 我看过:
http://msdn.microsoft.com/en-us/library/ms752100.aspx Adorner 的,但它说它只适用于 WPF。我在 WinForms 中尝试过,但(如预期的那样)没有用。
如何在我的应用程序中获得对齐线(类似于 VS 中的线)?
谢谢
贝尔
在您的移动控件中,您可以通过除然后乘以线条的宽度来调整Left
and :Top
left = (left/10)*10;
top = (top/10)*10;
它并不完美,但它很简单。当然,由于控件没有 MoveEnd 事件,因此您必须跟踪 MouseButton 状态或类似的东西。
编辑:更好的实现将正确地舍入除法结果,因此 134 = 130 和 136 = 140。
我有同样的问题,我还在寻找解决方案;这是我到目前为止所做的,它可能是你的解决方案
const grid = 12;
private void MyControl_LocationChanged(object sender, EventArgs e)
{
if (this.Left % grid != 0)
this.Left -= this.Left % grid;
if (this.Top % grid != 0)
this.Top -= this.Top % grid;
}
或在用户控件中
protected override void OnMove(EventArgs e)
{
if (this.Left % grid != 0)
this.Left -= this.Left % grid;
if (this.Top % grid != 0)
this.Top -= this.Top % grid;
}
我目前的挑战是绘画活动;我的控件托管在面板中,我正在寻找一种在必要时锁定和解锁该面板图的方法;例如:仅在 left 或 top 改变后