Dicas Rápidas – ExF03 – Detecção de Colisão
Um dos requisitos no exercício F03 é a não sobreposição dos controles.
Ou seja: um objeto não pode ocupar o lugar de outro ao mesmo tempo.
Uma maneira simples de detectar a colisão é através da propriedade Bounds de um controle.
Tal propriedade reflete o retângulo relacionado à área ocupada por um controle. O método IntersectsWith desta propriedade pode ser usado para verificar se um retângulo tem algum cruzamento com outro.
No exemplo abaixo, no caso de sobreposição, a posição original é retornada.
Ver em anexo o código funcionando.
// Obtém o elemento que está sendo arrastado
Button b = (Button) e.Data.GetData(typeof(Button));
// Armazena o ponto no qual o retângulo está
Point pOrigem = b.Location;
// Calcula o ponto que o elemento foi arrastado
Point p = new Point(e.X, e.Y);
// Coloca no ponto desejado
b.Location = this.PointToClient(p);
// Percorre todos os controles do form
foreach (Control c in this.Controls)
{
// Há um cruzamento entre os dois controles
// ou seja, um está sobre o outro
// O controle não é ele mesmo (b!=c)
if (b.Bounds.IntersectsWith(c.Bounds) && b!=c)
{
// Volta para a posição original
b.Location = pOrigem;
break;
}
}
Comentários