none
Owned form não funcionando RRS feed

  • Pergunta

  •  

    Ola, tenho o seguinte codigo (exemplo):

     

    Code Snippet

    // metodos do form principal

    public Form createForm()

    {

        Form f = new Form();

        f.Owner = this;

        return f;

    }

    public void dockform(Form f)

    {

        f.TopLevel = false;

        myPanel.Controls.Add(f);

    }

    public void undockForm(Form f)

    {

        myPanel.Controls.Remove(f);

        f.TopLevel = true;

        f.Owner = this;

    }

     

    // exemplo de uso

    // codigo dentro do form principal

    Form f = createForm();

     

    // até aqui tudo bem, ele funciona normalmente, aparece sempre na frente do seu owner

    dockForm(f);

     

    undockForm(f);

    // a partir daqui ele não mais aparece na frente do owner... aparece como não tendo parente nenhum e fica atrás do form principal se perder o foco.

     

     

     

    sábado, 26 de abril de 2008 04:03

Todas as Respostas

  • O que parece é que você quer setar o parent e não o Owner:

     

    Code Snippet

    public Form createForm()

    {

      Form f = new Form();

      f.TopLevel = false;

      f.Parent = this;

      return f;

    }

     

    public void dockform(Form f)

    {

      f.TopLevel = false;

      panel1.Controls.Add(f);

      f.Location = new Point(0, 0);

    }

     

    public void undockForm(Form f)

    {

      panel1.Controls.Remove(f);

      f.Parent = this;

    }

     

     

     

    Bruno

     

    domingo, 27 de abril de 2008 15:14
  • Olá pessoal,

    Poderia informar qual o funcionamento dessa class.

    Seria para abrir forms dentro de um PANEL ?


    Grato.

    Marcelo Wanderley.
    domingo, 27 de abril de 2008 16:51
  • Não seria exatamente o que eu queria.

    Com o Owner, o meu form aparece sempre na frente do form principal, mesmo que perca o foco.

    Utilizando apenas Parent, o form aparece apenas dentro do form principal. Movendo este form, somente será visivel dentro.

     

    O efeito que quero seria a mesma coisa que o CTRL+F do Internet Explorer. A janela de procura aparece na frente do form principal e não é levado para trás se perder o foco.

     

     

    E sim, este código seria para se abrir um form dentro de um panel.

    domingo, 27 de abril de 2008 23:03
  • Olá Bruno,

     

     Aproveitando o post. Smile

     

     Estou querendo fazer basicamente isso que foi comentado aqui no post.

     

     Estou fazendo da seguinte forma.

     

    Private Sub botaoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botaoToolStripMenuItem.Click

     

    ' Abrir form2

    My.form2.Show()

    Me.Hide()

     

    End Sub

     

     Só que assim ele abre uma outra janela.

     

     E queria que o form2 abri-se dentro do mesmo form usando um Panel.

     

     Poderia ajudar?

     Grato.

     Marcelo Wanderley

    segunda-feira, 28 de abril de 2008 01:29
  • Marcelo, será que não há como fazer algo do tipo:

     

    form2.TopLevel = False

    form2.Parent = Me

    form2.Show()

     

    ou algo parecido?

     

    segunda-feira, 28 de abril de 2008 01:42
  •  

    Rogerio,

     

     Muito obrigado, funcionou da forma que você informou.

     

     Só que vou ainda mais além.

     

     Tipo:

     

     Tenho um form. Só que nele tenho dois itens. Cadastro e Consulta.

     

     Como dividir isso, dentro do mesmo form. Cada um sendo acessado de um botão, sendo menustrip.

     

     No caso teria o uso de um panel?

     

     Muito Obrigado.!

     Marcelo Wanderley.

    segunda-feira, 28 de abril de 2008 01:52
  •  

    Você pode utilizar TabControl ou então colocar dois botões e dois panel.

     

    No segundo caso poderia ser feito desta forma:

     

    Code Snippet

    ' No load do form

    Private Sub form_load()

       panel_cadastro.Visible = True;

       panel_consulta.Visible = False;

    End Sub

     

    ' evento click do botão cadastro

    Private Sub button_cadastro_Click()

       panel_cadastro.Visible = True;

       panel_consulta.Visible = False;

    End Sub

     

    ' evento click do botão consulta

    Private Sub button_consulta_Click()

       panel_cadastro.Visible = False;

       panel_consulta.Visible = True;

    End Sub

     

    Como não entendo muito de VB, é apenas um código mais ou menos Smile

     

    O modo mais fácil é utilizar um TabControl eu acho. Use um modo personalizado como este somente se o seu botão for customizado ou se quer criar outro tipo de behaviour.

    segunda-feira, 28 de abril de 2008 02:03
  •  

    Rogério:

     

    Agora entendi o que você quer fazer, não é deixar a janela dentro da form e sim sempre no topo dela. Neste caso, seu código está correto, testei aqui e não tive problemas com este código:

     

    Code Snippet

    public Form createForm()

    {

      f = new Form();

      f.TopLevel = true;

      f.Owner = this;

      return f;

    }

     

    public void dockform(Form f)

    {

      f.TopLevel = false;

      panel1.Controls.Add(f);

      f.Location = new Point(0, 0);

    }

     

    public void undockForm(Form f)

    {

      panel1.Controls.Remove(f);

      f.TopLevel = true;

      f.Owner = this;

    }

     

     

    Acredito que seu problema não esteja no código e sim em alguma propriedade (eu suspeitaria inicialmente da propriedade Dock - você deve estar setando ela para Fill no dockform, e isso pode estar causando o problema que você está vendo)

     

    Bruno

     

    segunda-feira, 28 de abril de 2008 10:17
  • Rogerio,

     

     Muito obrigado pela ajuda, com isso facilita muito meu entendimento.

     

     Vou fazer os testes. Te informo quando tiver êxito.

     

     Muito Obrigado mesmo.

     Abraços

     Marcelo Wanderley.

     

    segunda-feira, 28 de abril de 2008 10:29
  • Resolvi meu problema substituindo a linha:

    panel1.Constrols.Add(f) por apenas uma modificação de parent.

     

    Code Snippet

    public Form createForm()

    {

      Form f = new Form();

      f.Owner = this;

      return f;

    }

     

    public void dockform(Form f)

    {

      f.Owner = null;

      f.TopLevel = false;

      f.Parent = this.panel1;

    }

     

    public void undockForm(Form f)

    {

      f.Parent = null;

      f.TopLevel = true;

      f.Owner = this;

    }

     

     

    De qualquer forma obrigado.

    segunda-feira, 28 de abril de 2008 16:52