Verhindern, dass ein Steuerelement aus dem Container verschoben wird
Diese Frage hängt mit einer anderen Frage von mir zusammen, die hier zu finden istfinden Sie hier. Ich wollte umziehenPictureBox
in seinem übergeordneten Container, der aTabPage
(Wenn es einen Unterschied macht!) Mit dem folgenden Code kann die Bewegung ausgeführt werden:
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;
}
Jetzt ist mein Problem, es gibt keine Grenze für diese Verlagerung der Kontrolle. Der Benutzer kann die Steuerelemente kilometerweit vom sichtbaren Bereich der ziehenTabPage
das ist meine bilderbox drin. Ich habe versucht, der Bewegung durch Ändern des Symbols einige Grenzen zu setzenMouseMove
Ereignis wie dieses, um zumindest zu verhindern, dass es aus derLeft
undRight
sichtbarer Bereich der Registerkarte:
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));
}
}
Das Problem mit dem obigen Code ist jedoch immer dann, wenn die Bildbox auf die rechte oder linke Seite des Containers und auf die trifftLeft
oderRight
gleich 0 bekommen, ich kann den Regler nicht mehr bewegen.
Irgendwelche Hilfen / Tipps, um zu erreichen, dass diese Bewegung innerhalb des Behälters eingeschränkt wird, zLeft, Right, Top and Bottom
von der bilderbox wird geschätzt!