Move image inside a picturebox with the mouse without using the scrollbar

Asked

Viewed 1,551 times

2

Please, does anyone know how I can move an image inside a pictureBox without having to click on scrollbar? What I want is to move the image, just by clicking the mouse on it so as to drag it inside the pictureBox.

This is the Form:

Form

When I click the button, it loads an image in my picturebox according to the code below:

private void button1_Click(object sender, EventArgs e)
{
    panel1.AutoScroll = true;
    pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
    pictureBox1.Image = Image.FromFile("C://matrix3.jpg");
}
  • Create a Mousemove in the picture, and in this Mousemove, change the Scrollx and Scrolly of the Scrollbar

1 answer

4


A possible solution would be to use the event Mousemove of your Picturebox to apply the scrolling according to the change in position of your cursor:

    // Variáveis globais:
    int posXInicial; // Posição X do mouse ao clicar/se mover sobre a imagem
    int posYInicial; // Posição Y do mouse ao clicar/se mover sobre a imagem

    enum Sentido // Sentido do movimento
    {
        Cima,
        Baixo,
        Direita,
        Esquerda
    }

    private void ScrollImg(int pixels, Sentido sent)
    {
        using (Control ctrl = new Control())
        {
            ctrl.Parent = panel1; // Define o controle pai
            switch (sent)
            {
                case Sentido.Baixo:
                    ctrl.Top = panel1.ClientSize.Height + pixels; // Adiciona pixels à distância do controle até o topo
                    break;
                case Sentido.Cima:
                    ctrl.Top = pixels * -1;
                    break;
                case Sentido.Direita:
                    ctrl.Left = panel1.ClientSize.Width + pixels;
                    break;
                case Sentido.Esquerda:
                    ctrl.Left = pixels * -1;
                    break;
                default:
                    break;
            }
            panel1.ScrollControlIntoView(ctrl); // Aplica a rolagem
        }
    }

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        // Definindo a posição inicial (em relação à imagem) do mouse a clicar sobre a imagem:
        posXInicial = e.Location.X;
        posYInicial = e.Location.Y;
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        int pixels = 15; // Número de pixels movidos ao arrastar o mouse sobre a tela

        if (e.Button == MouseButtons.Left) // Verifica se o botão esquerdo está pressionado
        {
            /* OBS:
             * Como o evento MouseMove é disparado várias vezes, é necessário
             * verificar se a posição (tanto X quanto Y) do mouse mudou se comparada à última.
             */

            if (posXInicial != e.Location.X) 
            {
                // Ajusta o movimento de acordo com a direção para a qual o mouse está sendo movido:

                if (e.Location.X > posXInicial) 
                {
                    ScrollImg(pixels, Sentido.Direita); // Chama o método de scrolling
                    posXInicial = e.Location.X + pixels; // Redefine a posição do cursor do mouse em relação à imagem
                }
                else
                {
                    ScrollImg(pixels, Sentido.Esquerda);
                    posXInicial = e.Location.X - pixels;
                }
            }

            if (posYInicial != e.Location.Y)
            {
                if (e.Location.Y > posYInicial)
                {
                    ScrollImg(pixels, Sentido.Baixo);
                    posYInicial = e.Location.Y + pixels;
                }
                else
                {
                    ScrollImg(pixels, Sentido.Cima);
                    posYInicial = e.Location.Y - pixels;
                }
            }
        }
    }

Note: To scroll the image along the Panel I used the Scrollcontrolintoview. That question SOEN demonstrates an interesting application of this method.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.