我有一个应用程序,用户可以在窗体上拖动控件。但是他们 请求我使用Snap-To线来简化控件的对齐。我不知道偷偷摸摸的行以及如何实现它们 - 我已经看过了:
http://msdn.microsoft.com/en-us/library/ms752100.aspx Adorner's,但它说这只适用于WPF。我在WinForms中尝试过但是(正如预期的那样)没有用。
如何在我的应用中获得对齐线(类似于VS中的那些)?
谢谢
巴尔
答案 0 :(得分:1)
答案 1 :(得分:1)
在您的移动控件中,您可以通过除以行的宽度然后乘以Left
和Top
进行调整:
left = (left/10)*10;
top = (top/10)*10;
它并不完美,但它很简单。当然,由于控件没有MoveEnd事件,您必须跟踪MouseButton状态或类似的东西。
编辑:更好的实施方案可以正确地舍入除法结果,因此134 = 130和136 = 140。
答案 2 :(得分: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;
}
我目前的挑战是绘画活动;我的控件托管在面板中,我正在寻找一种方法来在必要时锁定和解锁面板图;例如:仅在左侧或顶部更改后