Предотвращение перемещения элемента управления из его контейнера
Этот вопрос связан с другим моим вопросом, который можно найти здесьможно найти здесь, Я хотел переместитьPictureBox
в родительском контейнере, который являетсяTabPage
(Если это имеет какое-то значение!) Используя код ниже, движение может быть сделано:
private Point start = Point.Empty;
private bool _mapPackageIsMoving;
void pictureBoxPackageView_MouseUp(object sender, MouseEventArgs e) {
_mapPackageIsMoving = false;
}
void pictureBoxPackageView_MouseMove(object sender, MouseEventArgs e) {
if (_mapPackageIsMoving) {
pictureBoxPackageView.Location = new Point(
pictureBoxPackageView.Left + (e.X - start.X),
pictureBoxPackageView.Top + (e.Y - start.Y));
}
}
void pictureBoxPackageView_MouseDown(object sender, MouseEventArgs e) {
start = e.Location;
_mapPackageIsMoving = true;
}
Теперь моя проблема в том, что этому перемещению контроля нет предела. Пользователь может перетащить элементы управления на километры от видимой областиTabPage
который мой Picturebox находится внутри него. Я попытался добавить некоторые ограничения для движения, изменивMouseMove
событие, как это, по крайней мере, предотвратить его выход изLeft
а такжеRight
видимая область вкладки:
void pictureBoxPackageView_MouseMove(object sender, MouseEventArgs e) {
if (_mapPackageIsMoving) {
//Added condition
if (pictureBoxPackageView.Left >= 0 && pictureBoxPackageView.Right >= 0)
pictureBoxPackageView.Location = new Point(
pictureBoxPackageView.Left + (e.X - start.X),
pictureBoxPackageView.Top + (e.Y - start.Y));
}
}
Но проблема с приведенным выше кодом заключается в том, что каждый раз, когда picturebox попадает в правую или левую часть контейнера иLeft
или жеRight
получить равным 0, я не могу больше перемещать элемент управления.
Любые подсказки / советы по достижению ограничения этого движения внутри контейнера дляLeft, Right, Top and Bottom
из коробки изображения будут оценены!