Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

malainhocf

Trabalhar com janelas

Recommended Posts

malainhocf

Olá a todos, boa tarde

Uso o seguinte código para abrir uma janela

Dim form As New frmFamilias
form.MdiParent = Me
form.Show()

O problema é que se eu colocar isso numa opção de menu sempre que clicar na opção do menu abre-me várias janelas e eu não quero isso

Quero apenas que seja possível abrir apenas uma janela

Como se faz isso ?

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
fLaSh_PT

Fiz um projecto similar a uns tempo... cria uma variável do modulo.. do tipo List.. e depois fazes a verificação se a janela foi aberta..

Ve se precebes:

    
' Declara no inicio do form..
    Private __FormsAbertos As New List(Of Form)

    ' Simples sub para carregar todos os forms..
    Private Sub AbreForm(ByVal f As Form)

        ' Verifica se o form ja foi aberto..
        If __FormsAbertos.Contains(f) Then
            f.Focus() ' Se sim .. da lhe apenas um focus..
        Else 'Ou cria nova instancia..
            ' COnecta ao gestor de eventos, para controlar quando a janela fecha..
            AddHandler f.FormClosing, AddressOf Core_FormClosing
            f.MdiParent = Me
            f.Show()
            ' Importante adiciona a list de forms abertos
            __FormsAbertos.Add(f)
        End If

    End Sub

    Private Sub Core_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)
        'Importante, ao fechar o form é necessario remover da lista..
        __FormsAbertos.Remove(CType(sender, Form))
    End Sub

    Private Sub Core_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Simples como utilizar
        AbreForm(New FormTest)
    End Sub


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
fLaSh_PT

Sim, vê se está mais fácil:

        Dim bAberto As Boolean
      
        For Each oForm As Form In My.Application.OpenForms
            If oForm Is frmFamilias Then
                bAberto = True
                Exit For
            End If
        Next

        ' Ainda n foi aberto.. 
        If Not bAberto Then
            'Entao abre aqui,,
            Dim form As New frmFamilias
            form.MdiParent = Me
            form.Show()
        End If

Compr.


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
ByMySlf

O código está correcto, depende é a forma como o estás a aplicar.

Coloca aqui o bloco de código onde estás a usar o que o flash_CF sugeriu.

Share this post


Link to post
Share on other sites
fLaSh_PT

Olá, bom dia,

Meti esse código dentro da opção de menu para abrir a janela

Onde devo colocar esse código ?

Deves colocar onde abres o form.. mostra o código do menu..


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
malainhocf

Aqui está o código

Private Sub PrincipalToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrincipalToolStripMenuItem.Click
        Dim bAberto As Boolean

        For Each oForm As Form In My.Application.OpenForms
            If oForm Is frmManutencao Then
                bAberto = True
                Exit For
            End If
        Next

        ' Ainda não foi aberto..
        If Not bAberto Then
            'Entao abre aqui,,
            Dim form As New frmManutencao
            form.MdiParent = Me
            form.Show()
        End If
    End Sub


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
fLaSh_PT

Parece me tudo bem..

O que não funciona?


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
ByMySlf

Tal como o flash_CF referiu, o código deveria funcionar. De qualquer das formas tenta colocar como demonstrado em baixo.

Dim bAberto As Boolean = False

Private Sub PrincipalToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrincipalToolStripMenuItem.Click
        For Each oForm As Form In My.Application.OpenForms
            If oForm Is frmManutencao Then
                bAberto = True
                Exit For
            End If
        Next

        ' Ainda não foi aberto..
        If Not bAberto Then
            'Entao abre aqui,,
            Dim form As New frmManutencao
            form.MdiParent = Me
            form.Show()
        End If
    End Sub

Apenas coloquei a variável bAberto a inicializar a false e fora do evento, ou seja, global ao form.

Share this post


Link to post
Share on other sites
malainhocf

Olá a todos, boa tarde,

Fiz como disseram, nada resoltou

Continua a abrir mais do que uma janela da mesma coisa

Haverá outro porcesso para resolver o assunto ?

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
Zeant

Ninguém tem uma solução para o meu problema ?

o que tu estas a tentar fazer?

Abrir um FORM dentro de um MDIFORM?

Se for isso, esse codigo tem que funciona, ate basta colocares assim:

flistatprodutos.MdiParent = Me
flistatprodutos.Show()

Share this post


Link to post
Share on other sites
Baia

porque é que nao abres a janela de maneira a ser a única em que se pode trabalhar? bloquear as janelas que estão atras. assim evitas que se abra novamente a janela. Para isso no evento do botão onde abres a janela colocas

nome_da_janela_k_vais_abrir.showdialog()

Share this post


Link to post
Share on other sites
bioshock

Retirado do google:

Form2.show() lets Form1 active so you can enter data

Form2.showdialog makes Form1 read only you can't enter data

Share this post


Link to post
Share on other sites
fLaSh_PT

Será que não funciona por serem janelas MDI ?

Obrigado

Sim, desculpa tens razão.. Em Mdi dessa forma não funciona..

No loop substitui My.Application.OpenForms por Me.MdiChildren

Ou seja fica desta forma..

        For Each f As Form In Me.MdiChildren
            ' Verificação aqui..
        Next

O resto é igual..


Making the impossible possible and pwing the world on db at a time.

Share this post


Link to post
Share on other sites
Pwyll

De uma forma simplista....

No ToolStripMenuItem que chama o FrmManutencao

        Dim isOpen As Boolean

        For Each frm In Me.MdiChildren
            If TypeOf frm Is FrmManutencao Then
                MsgBox("O FrmManutencao ja esta aberto")
                frm.Focus()
                isOpen = True
            End If
        Next

        If Not isOpen Then
            Dim f As New FrmManutencao With {.MdiParent = Me}
            f.Show()
        End If

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.