Criando Custom Controls não visuais
As páginas web no .NET 2.0 não tem mais suporte completo a Components. Você até pode, clicando com o botão direito e selecionando View Component Designer, inserir Components na página, mas seus componentes não conseguem, por exemplo, ter acesso aos WebControls da página. Afinal, o que aparece no ComponentDesigner está inserido dentro da classe do code behind, enquanto que os WebControls não são mais declarados em code behind.
O que a MS deseja é que passemos a trabalhar com custom controls não visuais, que gerem tags de configuração, como acontece com DataSources, por exemplo.
Mas como fazer um controle não visual? Simples: Precisamos criar um controlDesigner que faça a geração do bloco cinza como acontece com o DataSource.
O processo é bem simples, veja:
Imports System.ComponentModel
<Designer(GetType(qualquerDesigner))>
Public Class qualquer
Inherits System.Web.UI.Control
End Class
Public Class qualquerDesigner
Inherits System.Web.UI.Design.ControlDesigner
Public Overrides Function GetDesignTimeHtml() As String
Return (Me.CreatePlaceHolderDesignTimeHtml())
End Function
End Class
Pronto, Qualquer é um controle não visual, qualquerDesigner é o designer que garante a aparência dele em design time (o bloco cinza). Quando ligamos um designer em um custom control o design visual passa a ser determinado pelo getDesignTimeHTML do designer.
O método CreatePlaceHolderDesignTimeHTML gera o HTML para gerar o bloco cinza típico dos DataSources.