【发布时间】:2017-05-03 21:16:14
【问题描述】:
这个问题与我的另一个问题有关,可以在这里找到can be found here。我想在它的父容器中移动一个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 的可见区域拖出几公里,我的图片框位于其中。我试图通过像这样更改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));
}
}
但是上面代码的问题是,每当图片框碰到容器的右侧或左侧并且Left或Right等于0时,我就不能再移动控件了。
任何帮助/提示可以限制图片框Left, Right, Top and Bottom 在容器内的移动!
【问题讨论】:
标签: c# winforms controls mouseevent mousemove