fato.Se tu, por exemplo, selecionares um controle qualquer e mudares a propriedade BackColor para Color.Transparent o que ele faz na verdade e pintar o background do controle da mesma cor do background do container em que o controle se encontra, ou (o que efetivamente acontece) da mesma cor do que estiver selecionado como Parent.Explicacao rapida: Parent e uma propriedade do tipo Control, que armazena um controle que e "superior" em relacao ao controle com o qual se esta trabalhando. Ao menos e esse meu entendimento, a partir do que eu vi ate hoje em relacao a essa propriedade. Ela e bem comum em controles dentro de containers (Nota: container tambem e um controle), onde o container, geralmente, e o Parent dos controles dentro dele. Os controles dentro do container sao chamados de Childs.Voltando ao assunto, se tu pegares um controle que tem um canto arredondado, por exemplo, e coloca-lo por cima de outro controle, perceberas que o canto esta pintado da cor do background do container, o que nao e efetivamente transparente.Isso nao sera um problema, se teus controles forem estaticos e nao forem se sobrepor.Mas e se eles forem?Bom, a boa noticia e que ha uma solucao, a ruim e que, dependendo do que tu fores desenvolver tu podes nao gostar muito do resultado, ou achar apenas razoavel. E o meu caso, achei razoavel.Agora por partes.Pesquisando na internet por transparencia e possivel encontrar coisas que nao funcionam, como e o caso da Color.Transparent, ou coisas que nao estao relacionadas com esse assunto, mas sim com uma transparencia em relacao as outras coisas na tela do computador, como a propriedade TransparencyKey. Usando essa propriedade, voce pode escolher uma cor que fique completamente transparente no software, mostrando o que estiver atras dele na tela do seu computador. Mas isso tambem nao e o que eu quero.Ai vem a questao. Dependendo do tipo de aplicacao que tu estiveres desenvolvendo tu precisas de mais ou menos recursos. Por exemplo, tu simplesmente tens um controle com cantos arredondados, que esta por cima de uma imagem e tu precisas que os cantos dele fiquem transparentes pra imagem aparecer corretamente. Ou tu estas criando controles que precisam se movimentar e sao mais dinamicos.No meu caso, por exemplo, meus controles sao especies de quebra-cabecas, eles precisam se encaixar, e para isso ha partes deles que precisarao ficar transparentes.Basicamente, a implementacao da transparencia e uma so, mas se eles serao dinamicos (o usuario podera movimenta-los) ha mais algumas coisas para prestar atencao alem da implementacao da transparencia.Primeiro uma explicacao escrita, depois o codigo de fato.Basicamente, o que eu fiz foi:Criar uma classe que herda a classe Control. Na verdade eu criei um Component (clicar com o botao direito do mouse na pasta do projeto e entao ir em Add > Component) e substitui a classe herdada por Control.No construtor usar o metodo SetStyle(ControlStyles flag, bool value) para habilitar a transparencia e definir BackColor como Color.Transparent (sim, ainda tive que fazer isso, inicialmente achei que nao fosse necessario, mas foi como funcionou melhor).Sobrescrever CreateParams para habilitar transparencia.Sobrescrever OnPaintBackground(PaintEventArgs pevent) para nao