Desenvolvimento - ASP. NET

IEWebControls - TabStrip e MultiPage

O Microsoft IE Web Controls nos disponibiliza ótimos controles para o desenvolvimento de Aplicações Web. Neste artigo abordarei sobre o TabStrip e o MultiPage, que usando-os em conjunto, podemos deixar nosso WebForm bastante intuitivo e de fácil acesso ao usuário final.

por Israel Aéce



O Microsoft IE Web Controls nos disponibiliza ótimos controles para o desenvolvimento de Aplicações Web. Neste artigo abordarei sobre o TabStrip e o MultiPage, que usando-os em conjunto, podemos deixar nosso WebForm bastante intuitivo e de fácil acesso ao usuário final.

Inicialmente, precisamos baixar o Microsft IE Web Controls no Site Oficial do ASP.NET em http://www.asp.net/IEWebControls/Download.aspx?tabindex=0&tabid=1, mas para quem baixar o código de exemplo no final do artigo, o arquivo de instalação chamado IEWebControls.exe já está incluído em uma pasta chamada IEWC.

Atente-se à instalação do IEWebControls, pois no final dela, é apresentado um arquivo "ReadMe.txt" onde é necessário fazer alguns ajustes.

Suponhando que tal instalação tenha sido concluída com sucesso, vamos então criar um novo Projeto do Tipo WebApplication:

Figura 1 - Criando a WebApplicatyion chamada "IEWebControls" para realizarmos o exemplo.

Um pouco acima onde me referi que após a instalação do Microsoft IE Web Controls deve ser realizado alguns ajustes, é justamente a geração de uma DLL chamada Microsoft.Web.UI.WebControls.DLL. DLL qual devemos referenciá-la em nosso projeto para termos acesso aos controles. Para isso vá até o Solution Explorer, clique com o botão direito do mouse em cima de References e depois em Add Reference.... Veja como realizar a referência na figura abaixo:

Figura 2 - Adicionando a referência ao Microsoft IE Web Controls.

Agora basta apenas localizar a DLL Microsoft.Web.UI.WebControls.DLL no computador e adicioná-la:

Figura 3 - Localizando a referência.

Depois da referência realizada, ainda temos mais um passo que devemos adicionar os controles à ToolBox do Visual Studio .NET para podermos a qualquer momento adicionar o(s) controle(s) desejado no WebForm. Para isso, clique com o botão direito do mouse em cima da ToolBox e em seguida em Customize ToolBox..., conforme a figura abaixo:

Figura 4 - Customizando a ToolBox.

Agora, só precisamos localizar os controles TabStrip e o MultiPage dentro da aba .NET Framework Components:

Figura 5 - Aqui devemos marcar o controle TabStrip e o MultiPage, para que eles apareçam na ToolBox.


Figura 6 - ToolBox com os IE Web Controls já adicionados.

Enfim, podemos então começarmos a utilizar o Microsoft IE Web Controls em nossos WebForms. Como o TabStrip trabalha em conjunto com o MultiPage, devemos ter os dois controles no WebForm.

Antes de mais nada, ao termos os dois controles no WebForm, precisamos informar o TargetID (ID do MultiPage que será responsável por exibir a página relacionada com a Tab) ao TabStrip. Para cada Tab criada no TabStrip é necessário termos um PageView relacionado dentro do MultiPage. Tendo por base que o ID do TabStrip é "TabExemplo" e o ID do MultiPage é "mpExibir", veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<iewc:tabstrip id="TabExemplo" runat="server" TargetID="mpExibir">
<iewc:Tab Text="Home"></iewc:Tab>
<iewc:Tab Text="Sobre"></iewc:Tab>
<iewc:Tab Text="Produtos"></iewc:Tab>
<iewc:Tab Text="Suporte"></iewc:Tab>
<iewc:Tab Text="Contato"></iewc:Tab>
</iewc:tabstrip>
<iewc:multipage id="mpExibir" runat="server">
<iewc:PageView></iewc:PageView>
<iewc:PageView></iewc:PageView>
<iewc:PageView></iewc:PageView>
<iewc:PageView></iewc:PageView>
<iewc:PageView></iewc:PageView>
</iewc:multipage>

Código 1 - Aqui vemos o TabStrip e o MultiPage. Repare na propriedade TargetID do TabStrip, que indicamos o MultiPage que receberá as páginas. Podemos perceber que para cada Tab criada, temos um PageView relacionado dentro do MultiPage.

OBS.: Não estou colocando aqui os "styles" dos controles para economizar espaço. Mas dentro do código de exemplo, está completo. Umas das grandes deficiências que pude perceber do controle MultiPage é que não conseguimos arrastar um controle como por exemplo um Button ou um TextBox para dentro dele, o que nos obriga a colocarmos via código HTML.

Agora, entre as tags <iewc:PageView></iewc:PageView> devemos colocar o conteúdo, controles, etc. (Códigos HTML), de acordo com o que necessitamos. Para nosso exemplo, resolvi implementar controles apenas na última Tab (Contato).

Depois de colocados os controles devidos em cada PageView, temos algo semelhante a imagem abaixo:

Figura 7 - O WebForm com os controles TabStrip e MultiPage já ganhando forma e navegação.


Figura 8 - E aqui, colocamos alguns TextBox e um Button.

Dica: Podemos navegar entre os PageViews através de dois links que encontramos na janela de propriedades quando estamos com nosso MultiPage selecionado:

Figura 9 - Navegando entre os PageViews do MultiPage.

Agora precisamos entender como trabalharmos isso do no CodeBehind. Para termos acesso às propriedades e eventos de cada controle que está dentro do MultiPage devemos mudar a forma de acesso. No caso do evento Click do Button "Enviar" precisamos direcioná-lo para uma Sub, qual devemos criá-la e no Evento Load da Página, informamos qual a rotina que deve ser executada quando clicarmos no botão "Enviar". Vejamos como fazer isso:

1
2
3
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler DirectCast(Me.mpExibir.FindControl("btnEnviar"), Button).Click, AddressOf Me.Enviar
End Sub

Código 2 - Aqui informamos que quando o usuário clicar no botão "Enviar", a rotina que deve ser disparada é a rotina "Enviar". Utilizamos o DirectCast para termos acesso as propriedades e eventos em tempo de compilação.

A partir daqui, apenas precisamos construir a rotina "Enviar" para que possa ser processada as informações da página. Como nesse caso, o Post será transferido para essa rotina, apenas temos que nos preocuparmos em programá-la. Inserimos um Label chamada "lblMensagem" no nosso WebForm (não dentro do MultiPage) para receber os valores dos TextBox.

1
2
3
4
5
6
7
Private Sub Enviar(ByVal sender As Object, ByVal e As EventArgs)
With Me.lblMensagem
.Text &= "Email: " & DirectCast(Me.mpExibir.FindControl("txtEmail"), TextBox).Text & "<br>"
.Text &= "Assunto: " & DirectCast(Me.mpExibir.FindControl("txtAssunto"), TextBox).Text & "<br>"
.Text &= "Mensagem: " & DirectCast(Me.mpExibir.FindControl("txtMensagem"), TextBox).Text
End With
End Sub

Código 3 - Agora o evento Click do Botão "Enviar", será tratado aqui, pois como vimos anteriormente, tranferimos ele para a Sub "Enviar".

Vamos testá-lo:

Figura 10 - MultiPage já em funcionamento.

Agora, suponhamos que de acordo com a navegação do usuário é necessário deixar uma Tab específica ativa (ou seja, em primeiro plano). Isso ocorre constantemente, pois muitas vezes o usuário vem de uma outra página e o ideal é deixar uma determinada Tab ativa. Para isso utilizamos a propriedade SelectedIndex da TabStrip. Para isso incluirei cinco links no WebForm. Cada link direcionará o usuário para a mesma página anexando na QueryString o índice que será responsável pela exibição de uma determinada Tab. Lembrando apenas que os items da Tab começamos em 0 (zero).

1
2
3
4
5
<A href="WebForm1.aspx?TabIndex=0">Home</A>
<A href="WebForm1.aspx?TabIndex=1">Sobre</A>
<A href="WebForm1.aspx?TabIndex=2">Produtos</A>
<A href="WebForm1.aspx?TabIndex=3">Suporte</A>
<A href="WebForm1.aspx?TabIndex=4">Contato</A>

Código 3 - Adicionando os links no WebForm.

Devemos também fazermos algumas mudanças no evento Load da página. Devemos atribuir o valor à propriedade SelectedIndex do TabStrip somente quando NÃO for PostBack, isso porque quando fizermos um Post, a Tab deve permanecer na qual está. Veja como ficará o código do evento Load da Página:

1
2
3
4
5
6
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler DirectCast(Me.mpExibir.FindControl("btnEnviar"), Button).Click, AddressOf Me.Enviar
If Not Page.IsPostBack Then
Me.TabExemplo.SelectedIndex = Convert.ToInt32(Request.QueryString("TabIndex"))
End If
End Sub

Código 4 - Na linha 4 atribuímos à propriedade SelectedIndex do TabStrip o valor que vem através da QueryString.



Figura 11 - Mostrando o PageView de acordo com a QueryString.

Acima vemos a Tab "Produtos" ativa. Reparem que a QueryString está com valor "2". Levando em consideração que o índice das Tabs começa em 0, a Tab "Produtos" é a de número 2.

Conclusão: Como pudermos ver, o MultiPage em conjunto com o TabStrip disponibiliza grandes facilidades para o usuário final. Além de bastante intuitivo, o estado dos controles é mantido e ao navegar entre as Tabs não é executado um Reload na página.

Artigo desenvolvido utilizando:

* Visual Studio .NET 2002
* Micrsoft IE Web Controls
* .NET Framework 1.0
* Windows XP Professional

Clique aqui para fazer Download do Código.
Israel Aéce

Israel Aéce - Especialista em tecnologias de desenvolvimento Microsoft, atua como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. Como instrutor Microsoft, leciona sobre o desenvolvimento de aplicações .NET. É palestrante em diversos eventos Microsoft no Brasil e autor de diversos artigos que podem ser lidos a partir de seu site http://www.israelaece.com/. Possui as seguintes credenciais: MVP (Connected System Developer), MCP, MCAD, MCTS (Web, Windows, Distributed, ASP.NET 3.5, ADO.NET 3.5, Windows Forms 3.5 e WCF), MCPD (Web, Windows, Enterprise, ASP.NET 3.5 e Windows 3.5) e MCT.