duvida em forms vb.net

estrafalhote

Power Member
boas

eu tenho um form principal que através de um menustrip acedo a todos os outros forms do programa e depois através do código seguinte faço com que todos eles apareçam "dentro" dele.

produtos.MdiParent = Me
clientes.MdiParent = Me
fornecedores.MdiParent = Me
encomendasloja.MdiParent = Me
encomendasclientes.Mdiparent = Me

só que se eu carregar num botão do menustrip e abrir um form atraves do 'form.show' e logo a seguir quiser abrir um outro novo este mesmo fica aberto e não o consigo fexar, já tentei fazer com que quando abrisse um form fichasse todos os outros mas não deu.
agora gostaria que me dissessem como faço para que cada vez que abro um form no programa o anterior se feche.

thanks:001:
 
Bem só te posso ajudar em C#, mas o workaround deve ser pouco..Eu colocaria no form "Pai" algo do tipo:

foreach (Form childForm in MdiChildren)
{
childForm.Close();
}

Mas podes sempre só retirar o form que se encontrar activo com o "ActiveMdiChild".. No entanto acho que os vbs maniacos podem-te ajudar melhor.. :)
 
Última edição:
Traduzindo a proposta do Cesaria, temos em VB.Net

For Each childForm As Form In MdiChildren
childForm.Close
Next

È uma das formas mais simples de o implementar, não requer grandes truques e resolve-se com 3 linhas.

Cumps
 
eu já tentei usar a dica que me deste mas não deu resultado por isso venho perguntar onde é que ponho isto, porque eu já tentei e não consegui porque o form que eu abria em primeiro continua sempre aberto

For Each childForm As Form In MdiChildren
childForm.Close
Next

o código que tenho no form todo é este:

Public Class principal

Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub


Private Sub ProdutosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


End Sub

Private Sub ProdutosToolStripMenuItem_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProdutosToolStripMenuItem.Click

produtos.Show()

End Sub

Private Sub FornecedoresToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FornecedoresToolStripMenuItem.Click
fornecedores.Show()


End Sub

Private Sub ClientesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClientesToolStripMenuItem.Click
clientes.Show()
End Sub

Private Sub principal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
produtos.MdiParent = Me
clientes.MdiParent = Me
fornecedores.MdiParent = Me
encomendasloja.MdiParent = Me
encomendasclientes.MdiParent = Me



End Sub

Private Sub DeClientesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DeClientesToolStripMenuItem.Click
encomendasclientes.Show()


End Sub

Private Sub ParaALojaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ParaALojaToolStripMenuItem.Click
encomendasloja.Show()

End Sub

Private Sub SairToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SairToolStripMenuItem.Click
End

End Sub
End Class
 
Última edição:
pronto cá estou eu outravez com as minhas complicaçoes, já consegui fazer o que queria graças ao cesaria (muito obrigado pela ajuda) só que agora tenho outro problema é que com eu tenho todos os forms "secundarios" a aparecerem dentro do pricipal tenho um problema, é que como eu decidi que o programa ia ter um tamanho de 800:600 quando abro um childform alguns deles nao aparecem dentro do principal enquanto os outros aparecem e eu não sei o porque desta situaçao, se alguem me puder ajudar agradecia

thanks
 
A ver se percebo, eles aparecem dentro do Parent mas ultrapassa o Form? Ou ficam fora do form?

uns aparecem dentro do parent mas aparecem a um canto ou uma cena assim enquanto outros aparecem assim:

semttulore7.png
 
Bem aqueles que aparecem num canto dentro do parent também me aconteceu, mas no codigo que te dei contornei a cousa maximizando-os à mão (por código) e tirar a opção maximized no visual studio em design mode..Quanto a esse form sair do parent, bem isso cheira-me que não lhe disseste que ele era um filhote do pai :) ..
 
Bem aqueles que aparecem num canto dentro do parent também me aconteceu, mas no codigo que te dei contornei a cousa maximizando-os à mão (por código) e tirar a opção maximized no visual studio em design mode..Quanto a esse form sair do parent, bem isso cheira-me que não lhe disseste que ele era um filhote do pai :) ..

1º eu tenho todos os forms como sendo "filhos" do pricipal como podes comprovar se reparares no código que pus uns tópicos atrás
Private Sub principal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
produtos.MdiParent = Me
clientes.MdiParent = Me
fornecedores.MdiParent = Me
encomendasloja.MdiParent = Me
encomendasclientes.MdiParent = Me

2º se não for pedir muito podias me arranjar o tal código de que falas é que eu tenho muita urgência em acabar este projecto

3º eu deparei-me com um problema estúpido é que eu em casa no meu monitor uso uma resolução de 800:600 e quando corro o programa ele fica como que em fullscreen e o dito form fica por cima do "pai", mas quando mudo a resolução do monitor para 1024:768 ele fica por cima do pai e não ao lado como a 800:600

thanks
 
Fechar e abrir forms filhos

boas

eu tenho um form principal que através de um menustrip acedo a todos os outros forms do programa e depois através do código seguinte faço com que todos eles apareçam "dentro" dele.



só que se eu carregar num botão do menustrip e abrir um form atraves do 'form.show' e logo a seguir quiser abrir um outro novo este mesmo fica aberto e não o consigo fexar, já tentei fazer com que quando abrisse um form fichasse todos os outros mas não deu.
agora gostaria que me dissessem como faço para que cada vez que abro um form no programa o anterior se feche.

thanks:001:

A ideia é instanciar os forms filhos e controlar a sua existência.


'O Form1 é o MDIForm
Public Class Form1

Private Sub ToolStripButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton2.Click

'eliminar o Form2 aberto:
elimina_form(Form2.Name)

' eliminar todos os filhos:
'elimina_todos_os_filhos()

Dim fr As Form = New Form2
'O form é aberto em cima à esquerda. Há outras opcções.
fr.StartPosition = FormStartPosition.Manual
'O form é aberto com o tamanho de criação. Outras opções ...
fr.WindowState = FormWindowState.Normal
fr.MdiParent =
Me
fr.Show()
End Sub

Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click

elimina_todos_os_filhos()

Dim fr As Form = New Form3
fr.StartPosition = FormStartPosition.WindowsDefaultLocation
'fr.WindowState = FormWindowState.Normal
fr.MdiParent = Me
fr.Show()
End Sub

Private Sub elimina_form(ByVal nome As String)
Dim frs() As Form = Me.MdiChildren
Dim i As Integer
For i = 0 To UBound(frs)
If frs(i).Name = nome Then
frs(i).Close()
frs(i).Dispose()
Exit For
End If
Next
End Sub

Private Sub elimina_todos_os_filhos()
Dim frs() As Form = Me.MdiChildren
Dim i As Integer
For i = 0 To UBound(frs)
frs(i).Close()
frs(i).Dispose()
Next
End Sub

End Class
 
Back
Topo