2

我有一个应用程序,用户可以在其中拖动表单上的控件。但他们要求我提供 Snap-To 线以使控件的对齐更容易。我不知道 snep-to 行以及如何实现它们 - 我看过:

http://msdn.microsoft.com/en-us/library/ms752100.aspx Adorner 的,但它说它只适用于 WPF。我在 WinForms 中尝试过,但(如预期的那样)没有用。

如何在我的应用程序中获得对齐线(类似于 VS 中的线)?

谢谢

贝尔

4

3 回答 3

1

您是否在 CodeProject 上看过这篇文章:

表单设计器

它具有与设计表面上的网格对齐的功能。

于 2010-02-05T23:41:55.173 回答
1

在您的移动控件中,您可以通过除然后乘以线条的宽度来调整Leftand :Top

left = (left/10)*10;
top = (top/10)*10;

它并不完美,但它很简单。当然,由于控件没有 MoveEnd 事件,因此您必须跟踪 MouseButton 状态或类似的东西。

编辑:更好的实现将正确地舍入除法结果,因此 134 = 130 和 136 = 140。

于 2010-02-05T23:46:05.263 回答
0

我有同样的问题,我还在寻找解决方案;这是我到目前为止所做的,它可能是你的解决方案

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 改变后

于 2016-05-19T17:28:05.257 回答