Я был здесь, сжигая полночное масло вокруг некоторых строк кода, пытаясь решить проблему.Переместить управление горизонтально или вертикально, а не комбинацию обоих
Код ниже будет регулировать элемент управления, чтобы он мог перемещаться в любом месте своего родительского элемента управления.
Однако этот код позволяет двигаться в любом направлении, я хотел бы ограничить его перемещение либо по оси X, либо по оси Y, что означает, что пользователь может перемещать его по горизонтали или по вертикали, никогда не сочетая их обоих.
Point lastPosition = Point.Empty;
control.MouseDown += (sender, evt) =>
{
lastPosition = evt.Location;
};
control.MouseMove += (sender, evt) =>
{
// This moves the control anywhere.
// I only want to move in one direction (left<->right or top <-> down) never diagonally
// Not sure how to first find which direction the user wants to move,
// nor how to restrict the movement to only one of the directions mentioned
int x = last.X + movingPiece.Left - mouseDownLocation.X;
int y = last.Y + movingPiece.Top - mouseDownLocation.Y;
movingPiece.Left = x;
movingPiece.Top = y;
};
Благодаря
Моей благодарность Hans Passant и TaW за свои ответы, из которых я добытых идей, из которых я построил небольшую 2D двигатель, способного разграничение областей на которых ряд элементов управления может перемещаться внутри контейнера панели с учетом обнаружения столкновений, предотвращения и ограничения направления движения, налагаемого рядом необходимых факторов. Я хотел бы принять оба ответа, но поскольку это невозможно, я принял ответ, который дал наибольшее понимание рассматриваемого вопроса.
Что ваш вопрос? – xxbbcc
@xxbbcc Для уточнения я отредактировал и предоставил образец кода и мою цель в нем. Спасибо, если вы можете помочь. –
Ну, первый шаг к решению будет для __you__, чтобы принять решение о __which__ движение должно случиться! – TaW