Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

Forms MDI Filhos e Janelas Modais

Todos sabemos que formulários MDI filhos não podem ser exibidos como modais. Porém, às vezes temos a necessidade de exibí-los e ficar no aguardo de um valor retornado por eles. Uma solução é criar um método no objeto que exibe o form MDI filho e chamar este método quando o form MDI filho estiver sendo descarregado para avisar do evento Unload. Desta forma, o formulário MDI filho avisaria o objeto que o exibiu de que está sendo descarregado e este poderia então examinar propriedades do form MDI filho para obter valores de retorno. O método residiria, portanto, dentro do objeto exibidor do MDI filho e receberia como argumento o form que está sendo descarregado para o caso de haver mais de uma instância do form MDI filho aberta ao mesmo tempo. Suponhamos que você tenha um formulário MDI pai nomeado "frmMain" e exiba um form "frmFilho". Dentro do código de frmMain , você criaria um procedimento chamado, por exemplo, DescarregandoMDIFilho, que receberia um form como argumento. Assim:

Public DescarregandoMDIFilho ( frm As Form )

No evento Unload do form filho, você escreveria:

frmMain.DescarregandoMDIFilho Me

Dentro de DescarregandoMDIFilho, você escreveria o código que acessa propriedades ou variáveis públicas do form filho que está sendo descarregado e faz o que tem de ser feito. No caso de haver mais de um objeto que pode chamar o form MDI filho, você teria que criar uma variável ou propriedade pública no MDI filho para conter uma referência ao objeto que o exibiu.  Poderia chamá-la de Proprietario e declará-la As Object. Exemplo de chamada no módulo de código do proprietário que exibiria o filho e armazenaria uma referência a si na propriedade Proprietario do form filho:

Dim frmF as frmFilho

Set frmF = New frmFilho

Load frmF

Set frmF.Proprietario = Me

frmF.Show

No evento Unload do filho, você escreveria Proprietario.DescarregandoMDIFilho Me. Qualquer objeto que pudesse ser o  Proprietario teria que ter a implementação do método DescarregandoMDIFilho dentro do seu módulo de código.