Ir para conteúdo
Fórum Script Brasil
  • 0

Verificar Form Aberto


alexandremanowar

Pergunta

E aí galera beleza!

Eu tenho um projeto com um MDIPAi e 2 form filhos.

No MDIPai tem uma opção no menu que eu quero que verifique, quando eu clicar nessa opção qual form esta aberto se é o fomr1 ou form2 ou se os dois estão fechados ou se os dois estão abertos, quero que ele exiba isso em um MsgBox.

Como eu faço isso? É possível?

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

E aí Graymalkin beleza

Então cara já fiz várias tentivas usando essa opção MdiChildren para a opção no meu MDIPai indentificar qual form esta aberto mas nenhuma deu certo. Já tentei vários modos tipo esse:

If Form1.MdiChildren.Open Then

MsgBox("O Form1 esta verto",.....

else

MsgBox("O Form2 esta verto",.....

End If

Tentei outras formas mas todas deram erradas!

Porque? O que estou fazendo errado?

Preciso que quando eu clicar na opção do menu do meu MDIPai ele exiba em um MsgBox o nome do form que esta aberto no momento.

Mas acho que não entendi a forma que a opção MdiChildren funciona. Você poderia me explicar?

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

MdiChildren é uma coleção, portanto seus elementos podem ser acessados via índice (MdiChilren(0), MdiChildren(1), etc.) ou através de um For Each:

        For Each janela As Form In Me.MdiChildren
            MessageBox.Show(janela.Name)
        Next janela

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E aí cara beleza!

Estou ralizando uns testes aqui e estou tendo o seguinte o problema. Usei o esquema que você me ensinou mas esta dando problema na hora de capturar a variável. Por exemplo.

Quando era um único form bastava eu fazer assim:

     Dim f As Nota = Me.ActiveMdiChild


        Dim g As Graphics = e.Graphics
        Dim mensagem As String
        Dim mensagem2 As String
        mensagem = f.operacao.Text
        mensagem2 = f.cfop.Text
....
Porém o meu valor agora pode vir de outro form então eu fiz assim:
 For Each janela As Form In Me.MdiChildren

            If janela.Name = "Nota" Then
                Dim f As Nota = Me.ActiveMdiChild
            Else
                Dim f As ConsultaNota = Me.ActiveMdiChild
            End If

        Next janela


        Dim g As Graphics = e.Graphics
        Dim mensagem As String
        Dim mensagem2 As String
        mensagem = f.operacao.Text
        mensagem2 = f.cfop.Text
....

Mas esta dando erro na seguinte linha:

mensagem = f.operacao.Text

mensagem2 = f.cfop.Text

esta dando a seguinte MSN:

Name 'f' is not declared

Já fiz outros teste mas também deu errado. Onde estou errando?

Link para o comentário
Compartilhar em outros sites

  • 0

Você está errando em declarar "f" dentro de um If. Em VB.NET, as instruções (If, For, While, Select Case e Try) também tem escopos próprios assim como as funções, rotinas, classes e módulos. Declare "f" fora da instrução (e com um tipo que possa acomodar qualquer um dos objetos) e você não terá problemas.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E aí Graymalkin beleza!

Como assim? Não entendi. Se eu tenho que usar um código que tome uma decisão de qual objeto ele vai usar eu deveria usar uma intrução de contro if????? Nesse caso o que eu posso fazer? Você podria me ajudar?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que com o código você vai entender melhor (observe onde declarei o "f" e onde usei ele):

        Dim f As Form

        For Each janela As Form In Me.MdiChildren

            If janela.Name = "Nota" Then
                f = Me.ActiveMdiChild
            Else
                f = Me.ActiveMdiChild
            End If

        Next janela


        Dim g As Graphics = e.Graphics
        Dim mensagem As String
        Dim mensagem2 As String
        mensagem = f.operacao.Text
        mensagem2 = f.cfop.Text
....

Sendo que não entendi muito bem qual é a desse If já que tanto nele quanto no Else o valor atribuído a "f" é o mesmo. Só o tipo que é diferente, porém em VB.NET isso não tem problema (devido ao recurso de late-binding).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

hahaha

Cara o sono é algo triste mesmo. Olha como eu estava declarando

        For Each janela As Form In Me.MdiChildren

            If janela.Name = "Nota" Then
                f = Me.ActiveMdiChild
            Else
                f = Me.ActiveMdiChild
            End If

        Next janela

        Dim f As Form

        Dim g As Graphics = e.Graphics
        Dim mensagem As String
        Dim mensagem2 As String
        mensagem = f.operacao.Text
        mensagem2 = f.cfop.Text
Eu estava declarando o Dim f As Form depois das condições. E agora que você comentou esse if é totalmente inútil mesmo. A idéia era pegar o valor do form mas ele jpa esta no Me.ActiveMdiChild. Mas valeu a idéia, pelo menos entendi, se eu tivesse menos sono veria que estav declarando depois da estrutura. Cara valeu mesmo pela explocação, na verdade agora que você abriu meus olhos cheios de café deixei o código assim:
         For Each janela As Form In Me.MdiChildren

           
        Next janela

        Dim f As Form
         f = Me.ActiveMdiChild

        Dim g As Graphics = e.Graphics
        Dim mensagem As String
        Dim mensagem2 As String
        mensagem = f.operacao.Text
        mensagem2 = f.cfop.Text

Valeu Graymalkin!

Link para o comentário
Compartilhar em outros sites

  • 0

E aí pessoal beleza!

Velhos problemas na cabeça, estava sem tempo de mexer no vb agora voltei a estudar e me deparei com um problema antigo o de validar o form que estiver aberto. Confome o Graymalkin me explicou acima bastava eu fazer isso:

Dim f As Form
f = Me.ActiveMdiChild

Dim g As Graphics = e.Graphics

Dim mensagem As String
Dim mensagem2 As String

mensagem = f.operacao.Text
mensagem2 = f.cfop.Text

Porém dessa forma ele não da erro nas 2 primeiras linhas que são:

Dim f As Form

f = Me.ActiveMdiChild

Mas da erro nessa operação f.operacao.Text e da a seguinte MSN de erro:

'operacao' is not a member of 'System.Windows.Forms.Form'

Aí quando eu mando executar o programa ele pergunta:

There were build errors. Would you like to continue and run the last successesful build? Se eu responder "no" ele volta ao código se eu responder "yes" ele executa o´a compilação antiga.

Pelo que entendi ele não esta encontrando o campo operacao.Text eu acho que esta envolvido com Me.ActiveMdiChild mas ainda não consegui resolver, já estou tentando achar o problemas mas se alguém poder me ajudar eu agradeço.

Valeu

Editado por alexandremanowar
Link para o comentário
Compartilhar em outros sites

  • 0

E aí Graymalkin beleza

Cara procurei e não tem esse opção no código cara! Estou tentando arrumar mas não funciona. O que você acha qie pode ser. Será que tenho que fazer dois blocos de código para funcionar ou seja um para cada form?

Link para o comentário
Compartilhar em outros sites

  • 0

Já tentei dessa form colocando o nome do form porém ele da esse erro:

Não é possível converter um objeto do tipo 'projeto.meuform' no tipo 'projeto.meuform2'.

O código ficou exatemente assim:

Dim f As meuform
f = Me.ActiveMdiChild

Dim g As Graphics = e.Graphics

Dim mensagem As String
Dim mensagem2 As String

mensagem = f.operacao.Text
mensagem2 = f.cfop.Text
E já fiz declarando como objeto e deu essa MSN de erro: Membro público 'operacao' no tipo 'ConsultaNota' não encontrado. O código é esse:
Dim f As Object
f = Me.ActiveMdiChild

Dim g As Graphics = e.Graphics

Dim mensagem As String
Dim mensagem2 As String

mensagem = f.operacao.Text
mensagem2 = f.cfop.Text

E se eu comentar o mensagem = f.operacao.Text, ele passa o erro para a próxima linha.

Vou continuar tentando achar uma solução, se você achar me ajude por favor

Obrigado pela ajuda

Editado por alexandremanowar
Link para o comentário
Compartilhar em outros sites

  • 0

E aí Graymalkin beleza

Então na verdade pode ser a janela filha "meuform" ou "meuform2. Porque é o seguinte a meuform é o form de preenchimento onde o cara preenche e armazena e pode também imprimir. O form 2 possui os mesmos campos porém para consulta o usuário pode consultar e também imprimir, então pensei já qie os dois forms tem os mesmo campos .Text vou usar um único código de impressão. Mas acho que tenho que fazer um código de impressão para cada.

O que você acha?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, se ambos os forms possuem as mesmas caixas de textos com *exatamente* os mesmos nomes, sim, você pode usar apenas um código. No caso, declare f como Object e as propriedades serão resolvidas em tempo de execução. Seria algo assim:

Dim f As Object
f = Me.ActiveMdiChild

Dim g As Graphics = e.Graphics

Dim mensagem As String
Dim mensagem2 As String

mensagem = f.operacao.Text
mensagem2 = f.cfop.Text

Veja aí se dá certo.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E aí Graymalkin beleza

Agora deu certo cara, declarei como objeto e funcionou, porpem tive que declarar os campos dos forms como publico porque estava tudo friend aí não rolava.

Cara valeu mais uma vez pela explicação.

Um abraço e at+

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...