|
|
|
|
|
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
|
|
|
|
|