none
Como não exceder os limites de uma picturebox ao desenhar um retângulo? RRS feed

  • Pergunta

  • Olá galera.

    Estou tendo um problema com os limites da picturebox.

    Eu desenho um retangulo, e movimento ele com o evento do mousedown e mousemove. Contudo, ele ultrapassa os limites da picturebox.

    Eu desejo que na hora que o retângulo chegue nas bordas da picturebox ele trave.

    Estou fazendo assim:

               

    private void pb_imageRecorte_Paint(object sender, PaintEventArgs e)
            {
                  e.Graphics.DrawRectangle(pen, rect);

            }
    private void pb_imageRecorte_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    primeiroponto = Control.MousePosition;
                }
            }
    private void pb_imageRecorte_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                            Point temp = Control.MousePosition;
                            Point res = new Point(primeiroponto.X - temp.X, primeiroponto.Y - temp.Y);
                            rect.Location = new Point(rect.Location.X - res.X, rect.Location.Y - res.Y);
                            primeiroponto = temp;
    }
                pb_imageRecorte.Invalidate();               
            }

    Alguém poderia dar uma luz de como fazer isso ??

    Obrigado




    • Editado La.Scalea quarta-feira, 18 de maio de 2016 19:28
    quarta-feira, 18 de maio de 2016 19:27

Respostas

  • Olá!

    Desculpa a demora Lemos1973!

    Então eu consegui fazer da seguinte forma:

      private void pb_imageRecorte_Paint(object sender, PaintEventArgs e)
            {
                if (rect.X < 0) rect.X = 0;
                if (rect.Y < 0) rect.Y = 0;
                if (rect.X + rect.Width > pb_imageRecorte.Width) rect.X = pb_imageRecorte.Width - rect.Width;
                if (rect.Y + rect.Height > pb_imageRecorte.Height) rect.Y = pb_imageRecorte.Height - rect.Height;

                using (Pen pen = new Pen(Color.LimeGreen, 1))
                {
                    e.Graphics.DrawRectangle(pen, rect);
                }
            }

    Obrigado pela ajuda!

    • Marcado como Resposta La.Scalea quarta-feira, 25 de maio de 2016 00:55
    quarta-feira, 25 de maio de 2016 00:55

Todas as Respostas

  • Não seria possível demarcar os limites, de modo que, quando o valor ultrapasse o ponto limite, ele se iguale?

    Por exemplo, digamos que a tela total tenha de 0 a 1000 pontos e o picturebox fique do 100 ao 800. Se o valor gerado pelo event mouse for maior que 800, o valor fique igual a 800. Se for menor que 100, se iguale a 100, a mesma coisa na altura. Você terá que ter a medida total da janela e do picturebox.

    Seria bom que o usuário não pudesse mexer no tamanho da janela, que ela fosse fixa ou  você teria que fazer medições constantes na janela pra readequar os valores.

    Abraço

    • Marcado como Resposta Thales F Quintas segunda-feira, 23 de maio de 2016 20:52
    • Não Marcado como Resposta La.Scalea quarta-feira, 25 de maio de 2016 00:55
    quinta-feira, 19 de maio de 2016 15:25
  • Boa tarde,

    Por falta de retorno, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma nova thread.

    Atenciosamente


    Thales F Quintas

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    TechNet Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 23 de maio de 2016 20:52
  • Olá!

    Desculpa a demora Lemos1973!

    Então eu consegui fazer da seguinte forma:

      private void pb_imageRecorte_Paint(object sender, PaintEventArgs e)
            {
                if (rect.X < 0) rect.X = 0;
                if (rect.Y < 0) rect.Y = 0;
                if (rect.X + rect.Width > pb_imageRecorte.Width) rect.X = pb_imageRecorte.Width - rect.Width;
                if (rect.Y + rect.Height > pb_imageRecorte.Height) rect.Y = pb_imageRecorte.Height - rect.Height;

                using (Pen pen = new Pen(Color.LimeGreen, 1))
                {
                    e.Graphics.DrawRectangle(pen, rect);
                }
            }

    Obrigado pela ajuda!

    • Marcado como Resposta La.Scalea quarta-feira, 25 de maio de 2016 00:55
    quarta-feira, 25 de maio de 2016 00:55