Inquiridor
Owned form não funcionando

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.
Todas as Respostas
-
O que parece é que você quer setar o parent e não o Owner:
Code Snippetpublic 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
-
-
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.
-
Olá Bruno,
Aproveitando o post.
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
-
-
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.
-
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
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.
-
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 Snippetpublic 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
-
-
Resolvi meu problema substituindo a linha:
panel1.Constrols.Add(f) por apenas uma modificação de parent.
Code Snippetpublic 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.