Привязка линий при выравнивании элементов управления во время выполнения - PullRequest
2 голосов
/ 06 февраля 2010

У меня есть приложение, где пользователи могут перетаскивать элементы управления в форме. Но они Вы просите у меня линии Snap-To, чтобы упростить выравнивание элементов управления. Я понятия не имею о строках snep-to и о том, как их реализовать - я посмотрел на:

http://msdn.microsoft.com/en-us/library/ms752100.aspx Adorner's, но там написано, что это только для WPF. И я попробовал это в WinForms, но (как и ожидалось) не сработало.

Как я могу получить привязки к линиям (что-то вроде тех, что в VS) в моем приложении?

Спасибо

Bael

Ответы [ 3 ]

1 голос
/ 06 февраля 2010

В вашем управлении перемещением вы можете настроить Left и Top, разделив, а затем умножив на ширину линий:

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

Это не идеально, но это просто. Конечно, поскольку элементы управления не имеют события MoveEnd, вам придется отслеживать состояние MouseButton или что-то подобное.

Изменить: Лучшая реализация будет правильно округлять результаты деления так 134 = 130 и 136 = 140.

1 голос
/ 06 февраля 2010

Вы видели эту статью на CodeProject:

Конструктор форм

Имеет привязку к сетке на поверхности дизайна.

0 голосов
/ 19 мая 2016

У меня была та же проблема, я все еще ищу решение; вот что я сделал до сих пор, это может быть решением для вас

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;
}

Моя текущая задача - рисование; мои элементы управления размещены на панели, я ищу способ заблокировать и разблокировать чертеж панели при необходимости; например: только после изменения левого или верхнего

...