USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  Visual Basic.Net    (Forms/MDI)

Título da Dica:  Recriando a coleção FORMs do VB 6
Postada em 6/10/2003 por ~Ð@®£@Ñ            
O VB 6 possuia uma coleção de formulários global chamada Forms. Sempre que um formulário era carregado ele era automaticamente inserido na coleção Forms. Assim a qualquer momento em que desejássemos poderiamos fazer um laço na coleção forms para manipular os formulários que estivessem carregados.

Uma coleção assim não existe no VB.NET. Porém existe a possibilidade de criarmos essa coleção nós mesmos.

O primeiro passo na criação de uma coleção assim é criarmos uma coleção personalizada que apenas aceite receber formulários em seu conteúdo. Para isso precisamos criar uma nova classe que herde as características da classe CollectionBase e faça um Shadow em alguns métodos para restringir o tipo de dados. Veja :

Public Class FormsCollection
Inherits CollectionBase

Public Shadows Function Add(ByVal FormObject As Form) As Form
MyBase.List.Add(FormObject)
Return FormObject
End Function

Public Shadows Sub Remove(ByVal FormObject as Form)
MyBase.List.Remove(FormObject)
End Sub
End Class

Feito isso devemos instanciar esta coleção assim que a aplicação se iniciar. Devemos então utilizar uma Sub Main em um módulo para iniciar a aplicação, veja :

Module StartHere
Public Forms As FormsCollection

Sub Main()
Forms = New FormsCollection()
Application.Run(New Form1())
End Sub
End Module

Em cada formulário deveremos codificar o constructor e o destructor de forma a que o formulário seja inserido na coleção forms no momento em que for criado e retirado no momento em que for destruido. Veja um exemplo :

Public Sub New()
MyBase.New()

'This call is required by the Windows Form Designer.
InitializeComponent()

'Add any initialization after the InitializeComponent() call.
Forms.Add(Me)
End Sub

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
Forms.Remove(Me)
End Sub


Para simplificar isso tudo podemos criar uma Class Library e inserir nela este formulário já codificado e a classe FormsCollection. Então em nossos projetos precisaremos apenas fazer referência a essa Class Library e utilizar o recurso de herança entre os forms para termos essa funcionalidade.

Quando desejarmos utilizar a coleção Forms, basta utilizar um For/Each, como abaixo :

Dim LoopForm As Form
Dim LoopControl As Control
For Each LoopForm In Forms
For Each LoopControl In LoopForm.Controls
MessageBox.Show(LoopControl.Name)
Next
Next
 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página