Tak jak w temacie, dodam jeszcze, że ten obrazek wczytany znajduje się w picturebox po wczytaniu i chce go przesuwać za pomocą kliknięcia i przesuwania (w lewu, w prawo itd.).
Gdybym rozumiał o co Ci chodzi to byłoby prościej?
Chyba chce załadować obrazek do PictureBoxa, a potem złapać go myszą (w sensie lewy przycisk wciśnięty) i przesuwać po PictureBoxie. Zgadłem?
Tak somekind. Właśnie oto mi chodziło. :)
Na mouseDown zapamiętujesz gdzie nastąpiło kliknięcie.
Na mouseMove (jeśli obrazek jest trzymany) wyliczasz o ile przesunąć obrazek.
Na mouseDown utrwalasz przesunięcie, np. przestawiasz flagę że w mouseMove już nie przesuwasz obrazka.
Nie wiem tylko co chcesz przesuwać, obrazek w picturebox, czy cały picturebox?
I maksymalnie jeden obrazek czy może ich być wiele?
Obrazek w picturebox, maksymalnie jeden.
Chce się komuś pisać gotowca? Bo jak nie to się postaram stworzyć jakąś herezję z LINQ i Reflections. ;)
tutaj konkretny przykład: http://www.codeproject.com/KB/miscctrl/ScalablePictureBox.aspx
Żeby autorowi pytania nie było smutno:
class MyPictBox : PictureBox
{
private Point location;
private Point scrollLocation;
private bool scroll;
public MyPictBox()
{
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (new Rectangle(location, size).Contains(e.Location))
{
scroll = true;
this.scrollLocation = e.Location;
}
base.OnMouseDown(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (scroll)
{
int deltaX = e.Location.X - scrollLocation.X;
int deltaY = e.Location.Y - scrollLocation.Y;
location = new Point(location.X + deltaX, location.Y + deltaY);
this.scrollLocation = e.Location;
}
base.OnMouseMove(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
scroll = false;
base.OnMouseUp(e);
}
protected override void OnPaint(PaintEventArgs pe)
{
if (Image != null)
{
pe.Graphics.Clear(this.BackColor);
pe.Graphics.DrawImage(this.Image, new Rectangle(imageCorner, image.Size)));
}
}
}
Żeby rozwiązanie było pełne, trzeba by tutaj dopisać parę rzeczy, na przykład obsługę zmiany rozmiaru kontrolki etc. Ja się z tym już nie bawiłem ale to dość proste.