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.