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.