Usuário com melhor resposta
Como não exceder os limites de uma picturebox ao desenhar um retângulo?

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