Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

malainhocf

Trabalhar com janelas

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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()

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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()

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.