przesuwanie obrazka wczytanego z dysku do picturebox

0

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.).

1

Gdybym rozumiał o co Ci chodzi to byłoby prościej?

0

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?

0

Tak somekind. Właśnie oto mi chodziło. :)

0

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?

1

I maksymalnie jeden obrazek czy może ich być wiele?

0

Obrazek w picturebox, maksymalnie jeden.

0

Chce się komuś pisać gotowca? Bo jak nie to się postaram stworzyć jakąś herezję z LINQ i Reflections. ;)

1

Ż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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1